我有一个由商品填充的列表框。每个项目包含一个对象如下:
public Contact(int idContact, string pseudo, string prenom, string nom, string numero, bool isOuter)
{
this.IdContact = idContact;
this.Pseudo = pseudo;
this.Prenom = prenom;
this.Nom = nom;
this.NumerosTel = numero;
this.IsOuter = isOuter;
}
现在我想根据 IsOuter 值为这些项目应用不同的样式,因为它是一个布尔值。我已经听说过 DataTemplateSelector ,但无法弄清楚它是如何工作的......有人可以告诉我该怎么做吗?
答案 0 :(得分:1)
首先,您可以像这样创建DataTemplateSelector
:
public class MyTemplateSelector : DataTemplateSelector {
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) {
var contact = (Contact)item;
if (contact.IsOuter == true) {
return (DataTemplate)Application.Current.Resources["DataTemplate1Name"];
} else {
return (DataTemplate)Application.Current.Resources["DataTemplate2Name"];
}
}
}
在此代码中,DataTemplates应位于 App.xaml 中。基本上,该方法必须返回您想要的DataTemplate作为DataTemplate对象。你将如何得到这个对象完全取决于你。
第二次,您需要设置ItemTemplateSelector
的{{1}},如下所示:
ListBox
就是这样。现在,根据IsOuter属性,不同的项目将具有不同的模板。
一些想法
您可能希望拥有一些可重复使用的模板选择器。例如,您可能有一个具有一个listbox.ItemTemplateSelector = new MyTemplateSelector();
属性的接口,并且在DataTemplate
中,检查该项是否实现了接口,如果是,则返回该属性的值。
无论如何,上面的代码现在应该可以使用,如果将来需要更多的SelectTemplateCore
,你将找到最方便的方式来编写/使用它们。 :)