我有一个控件想要根据其datacontext中的变量调整其样式。因为我有一个ListBox,其中包含客户或供应商的联系人列表。
每个联系人都有一个名称,并设置为客户或供应商。每个客户最近都有购买和电子邮件,而每个供应商都有公司名称,传真和销售信息。所以基本上我希望有两个基于contact_type变量的独立样式。
我怎么能这样做?
答案 0 :(得分:1)
这正是DataTemplateSelector设计的目的
实际上模板应该基于类 - 而不是变量
如果客户和供应商有一些共同的属性,那么让它们各自实现公共接口
答案 1 :(得分:0)
如果您将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>