我有一个控件,它想要根据其数据上下文中的变量调整其样式。就像我有一个列表框,其中包含客户或供应商的联系人列表。
每个联系人都有一个名称,并设置为客户或供应商。每个客户都有最近的购买和电子邮件,而每个供应商都有公司名称、传真和销售信息。所以基本上我想基于 contact_type 变量有两种单独的样式。
我该怎么做?
这正是DataTemplateSelector的设计目的
实际上,模板应该基于类 - 而不是变量
如果客户和供应商有一些共同的属性,则让他们各自实现通用接口
Contact
类子类化为Customer
和Vendor
类型,则只需为每个类型定义不同的DataTemplate
,WPF 将自动使用正确的类型。它们可以作为ListBox
的资源包含在下面的示例中,也可以在树的更高位置包含。
<ListBox ItemsSource="...">
<ListBox.Resources>
<DataTemplate DataType="{x:Type Customer}">
...
</DataTemplate>
<DataTemplate DataType="{x:Type Vendor}">
...
</DataTemplate>
</ListBox.Resources>
</ListBox>