我将EmployeeList作为Employee对象的observableCollection。
Employee对象具有薪资。
我想显示一些值,比如XAML中雇员的平均薪资,并且当一个项目被添加到列表中或者在更新的任何项目中薪资字段被更改时,UI字段应该被自动更新。
这可以通过为平均值创建一个属性并在列表中侦听集合更改和ProperyChanged处理程序来实现。
但是,我相信应该有其他更好的办法来做到这一点。(例如使用AttachedProperties或IValue转换器/IMultiValue转换器)
关于这一点,我有以下问题。
发布于 2010-09-29 14:03:35
使用属性肯定是可行的,特别是从MVVM的角度来看。想想奥卡姆剃刀:基本上,最简单的解决方案通常是最好的。
这当然是最干净的解决方案,因此也是最可维护的。另外,它是最可扩展的(如果您愿意的话,可以轻松地为不同的计算添加新的属性)。
您所需要做的就是创建只读属性,并在集合更改时使用该属性的名称调用PropertyChanged (听起来就像您正在做的那样)。
例如,这里有一个“平均”属性:
public Double Average
{
get { return mMyCollection.Average(); }
}
void mMyCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
PropertyChanged(this, new PropertyChangedEventArgs("Average"));
}附加属性不起作用--它们用于在子元素中指定父元素的属性。
理论上,ValueConverters可以工作(虽然它们可能必须在列表中的每一项以及整个集合中),但是您并没有真正地转换任何东西,而是根据现有数据提供额外的数据。要做到这一点,您需要使用各种模板,并且在任何需要更改任何东西的时候,您都需要再次使用它们。它很快就会变得复杂起来,也不会有什么好处。
https://stackoverflow.com/questions/3818578
复制相似问题