WPF,Datatemplates和数据绑定

时间:2013-05-28 20:10:14

标签: c# wpf xaml data-binding datatemplate

不是任何类型的特定代码问题,我只是想更好地理解数据绑定在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;

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

<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}"只查找与填充列表的项类型中的绑定匹配的属性吗?

2 个答案:

答案 0 :(得分:1)

  

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

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

您还可以为DataTemplate提供一种类型,这样您就可以根据集合中对象的特定类型设置多个模板。

答案 1 :(得分:0)

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

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