根据数据WP 8.1,不同的列表框项目样式

时间:2014-12-03 18:50:41

标签: c# listbox windows-phone-8.1 datatemplateselector

我有一个由商品填充的列表框。每个项目包含一个对象如下:

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 ,但无法弄清楚它是如何工作的......有人可以告诉我该怎么做吗?

1 个答案:

答案 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,你将找到最方便的方式来编写/使用它们。 :)