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

本文关键字:列表 样式 数据 WP | 更新日期: 2023-09-27 18:32:56

我有一个由项目填充的列表框。每个项目都包含一个对象,如下所示:

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

根据数据WP 8.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"];
        }
    }
}

在此代码中,数据模板应位于 App.xaml 中。基本上,该方法必须返回您想要作为数据模板对象的 DataTemplate。你将如何得到那个对象完全取决于你。

其次,您需要像这样设置ListBoxItemTemplateSelector

listbox.ItemTemplateSelector = new MyTemplateSelector();

仅此而已。现在,不同的项将具有基于 IsOuter 属性的不同模板。

一些想法

您可能希望拥有一些更可重用的模板选择器。例如,您可能有一个具有一个 DataTemplate 属性的接口,在 SelectTemplateCore 中,检查该项是否实现了该接口,如果是 - 返回该属性的值。

无论如何,上面的代码现在应该可以工作,如果你将来需要更多DataTemplateSelector,你会找到最方便的方式来编写/使用它们。 :)