首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以对项目列表使用IMultiValueConverter?

是否可以对项目列表使用IMultiValueConverter?
EN

Stack Overflow用户
提问于 2010-09-29 03:48:37
回答 1查看 669关注 0票数 0

我将EmployeeList作为Employee对象的observableCollection。

Employee对象具有薪资。

我想显示一些值,比如XAML中雇员的平均薪资,并且当一个项目被添加到列表中或者在更新的任何项目中薪资字段被更改时,UI字段应该被自动更新。

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

但是,我相信应该有其他更好的办法来做到这一点。(例如使用AttachedProperties或IValue转换器/IMultiValue转换器)

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

  1. 是否可以将IMultiValueConverter用于项的列表/观察集合?当添加到列表中的项以及特定属性发生更改时,应该调用转换器?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-29 14:03:35

使用属性肯定是可行的,特别是从MVVM的角度来看。想想奥卡姆剃刀:基本上,最简单的解决方案通常是最好的。

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

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

例如,这里有一个“平均”属性:

代码语言:javascript
复制
public Double Average   
{
    get { return mMyCollection.Average(); }
}

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

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

理论上,ValueConverters可以工作(虽然它们可能必须在列表中的每一项以及整个集合中),但是您并没有真正地转换任何东西,而是根据现有数据提供额外的数据。要做到这一点,您需要使用各种模板,并且在任何需要更改任何东西的时候,您都需要再次使用它们。它很快就会变得复杂起来,也不会有什么好处。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3818578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档