0

不是任何类型的特定代码问题,我只是想更好地了解数据绑定在DataTemplate. 这只是一个示例代码块;我定义了一个Client具有三个属性的类(这些属性的目的与问题无关)

public class Client
{
    public bool Powered { get; set; }
    public bool clientAlive { get; set; }
    public bool updaterAlive { get; set; }
}

ListView我使用客户端列表填充:

List<Client> clientList = new List<Client>();
//populate the list from JSON url, code omitted
listView1.ItemsSource = clientList;

这是包含用于在 ListView 中显示项目的模板的 XAML 代码块:

<ListView.ItemTemplate>
    <DataTemplate>
         <WrapPanel>
             <TextBlock Text="Powered: " FontWeight="Bold" />
             <TextBlock Text="{Binding Powered}" />
             <TextBlock Text=", " />
             <TextBlock Text="clientAlive: " FontWeight="Bold" />
             <TextBlock Text="{Binding clientAlive}" />
             <TextBlock Text=", " />
             <TextBlock Text="updaterAlive: " FontWeight="Bold" />
             <TextBlock Text="{Binding updaterAlive}" />
         </WrapPanel>
    </DataTemplate>
</ListView.ItemTemplate>

代码运行良好,一切都按预期显示,我只是想知道是否有人可以解释 WPF 中的数据绑定是如何工作的。就我而言,XAML 中没有任何内容引用Client该类,我只是对 XAML 如何知道显示绑定指定的属性感到困惑。是否Text = "{Binding = Powered}"只是在填充列表的项目类型中查找与绑定匹配的属性?

4

2 回答 2

1

Text = "{Binding = Powered}" 是否只是在填充列表的项目类型中查找与绑定匹配的属性?

基本上,是的。如果您填充列表的项目没有该属性,您会看到绑定错误(在调试时查看控制台)。

您还可以为您提供一个类型,DataTemplate这将允许您拥有多个模板,这些模板将根据集合中对象的特定类型应用。

于 2013-05-28T20:19:09.540 回答
0

当集合绑定到列表视图时,将生成每个列表项容器,并将 Content 设置为 Client 对象。因此,数据模板中的视觉呈现具有 Client 对象作为其数据上下文。

“{Binding Powered}”行将查找数据上下文并找到名为“Powered”的属性并解析其值。只需删除单词“Powered”并将其保留为“{Binding}”,WPF 将显示数据上下文对象的完全限定名称。

于 2013-05-29T06:56:26.730 回答