可以使用IMultiValueConverter作为项目列表吗?

时间:2010-09-29 03:48:37

标签: wpf xaml attached-properties ivalueconverter imultivalueconverter

我有EmployeeList作为Employee Object的observableCollection。

Employee对象有Salary。

我希望显示一些值,例如XAML中员工的平均薪水,当项目添加到列表或更新任何项目中更改Salary字段时,UI字段应自动更新。

这可以通过创建平均属性并在列表中侦听集合Changed和ProperyChanged处理程序来实现。

但是,我确信应该有其他更好的方法来做到这一点。 (比如使用AttachedProperties或IValueConverter / IMultiValueConverter)

关于这一点,我有以下问题。

  1. 是否可以使用IMultiValueConverter作为项目的List / ObservableCollection?当添加到列表中的项目以及特定属性发生更改时,应该调用转换器吗?

1 个答案:

答案 0 :(得分:1)

使用属性肯定是要走的路,特别是从MVVM的角度来看。想想Occam's Razor:基本上,最简单的解决方案通常是最好的。

这当然是最干净的解决方案,因此最易于维护。此外,它是最具扩展性的(如果您愿意,可以轻松地为不同的计算添加新属性)。

您需要做的就是创建只读属性,并在集合更改时调用带有该属性名称的PropertyChanged(听起来就是这样)。

例如,这是“平均”属性:

public Double Average   
{
    get { return mMyCollection.Average(); }
}

void mMyCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    PropertyChanged(this, new PropertyChangedEventArgs("Average"));
}

附加属性不起作用 - 它们用于在子元素中指定父元素。

ValueConverters在理论上会起作用(尽管它们可能必须在列表中的每个项目以及整个集合中),但是你并没有真正转换任何内容,而是根据现有数据提供额外的数据。要做到这一点,你需要使用各种模板,并且只要你需要改变任何东西,你就需要再次使用它们。它会匆忙变得复杂,并且没有任何好处。