不是任何类型的特定代码问题,我只是想更好地理解数据绑定在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}"
只查找与填充列表的项类型中的绑定匹配的属性吗?
答案 0 :(得分:1)
Text =“{Binding = Powered}”是否只查找与填充列表的项类型中的绑定相匹配的属性?
基本上,是的。如果填充列表的项目没有该属性,您将看到绑定错误(在调试时查看控制台)。
您还可以为DataTemplate
提供一种类型,这样您就可以根据集合中对象的特定类型设置多个模板。
答案 1 :(得分:0)
当集合绑定到列表视图时,将生成每个列表项容器,其中Content设置为Client对象。因此,数据模板中的视觉效果将Client对象作为其数据上下文。
“{Binding Powered}”行将查找datacontext并找到名为“Powered”的属性并解析其值。只需删除“Powered”一词并将其保留为“{Binding}”,WPF将显示datacontext对象的完全限定名称。