我将 EmployeeList 作为 Employee 对象的 observableCollection。

Employee 对象有 Salary。

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

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

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

对此,我有以下疑问。

  1. 是否可以将 IMultiValueConverter 用于项目列表/ObservableCollection?当项目添加到列表以及特定属性更改时应该调用转换器吗?
有帮助吗?

解决方案

使用属性绝对是可行的方法,尤其是从 MVVM 的角度来看。思考 奥卡姆剃刀: :基本上,最简单的解决方案通常是最好的。

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

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

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

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

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

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

从理论上讲,ValueConverters 可以工作(尽管它们可能必须位于列表中的每个项目以及整个集合上),但您并没有真正转换任何内容,而是根据现有数据提供附加数据。为此,您需要使用各种模板,并且每当您需要更改任何内容时,您都需要再次使用它们。它很快就会变得复杂,而且没有任何好处。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top