0

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

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

4

1 回答 1

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,您需要ListBox像这样设置:

listbox.ItemTemplateSelector = new MyTemplateSelector();

就是这样。现在不同的项目将有不同的模板,基于 IsOuter 属性。

一些想法

你可能想要一些更可重用的模板选择器。例如,您可能有一个具有一个DataTemplate属性的接口,并且在 中SelectTemplateCore,检查该项目是否实现了该接口,如果是,则返回该属性的值。

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

于 2014-12-03T19:08:15.193 回答