INotifyPropertyChanged:通知另一个类

时间:2012-11-14 09:43:46

标签: wpf data-binding datagrid inotifypropertychanged

我有一个类(我们称之为MyContainerClass),它是其他几个类的容器(让我们称它们为ClassAClassF)。 ClassAClassF继承相同的基类(我们称之为MyBaseClass)。在MyBaseClass中,我有一个名为Count的int属性,ClassAClassF继承。我在MyContainerClass中也有一个同名的int属性,它是ClassAClassF的总和。

然后我有一个datagrid,每行有一个MyContainerClass对象。网格的列显示ClassAClassF。网格中的最后一列显示总计(即绑定Count的{​​{1}}属性。现在,我希望在更改A-F范围内任何类中的MyContainerClass属性后,最后一列中的总数会更新。我在Count中实施了INotifyPropertyChanged,当我将MyBaseClass中的Count属性更改为ClassA时,它会触发。但我的数据网格中的最后一列保持不变。有线索吗?

修改 我创建了一个类图。 enter image description here

getCount()方法返回objA.Count + objB.Count + ... + objF.Count,并由ClassF中的Count属性返回。问题是:如果我更新objA.Count,我希望GUI(我的数据网格中的列)显示更新的总和。

2 个答案:

答案 0 :(得分:3)

仅实施INotifyPropertyChanged不足以进行自动更新。 MyContainerClass对象需要“订阅”其他列中MyBaseClass个对象的更改通知。解决此问题的一种方法是在MyContainerClass

中添加如下方法
void SubscribeToCount(MyBaseClass item)
{
    item.PropertyChanged += (s,e) => 
        this.Sum += (e.NewValue - e.OldValue); 
}

您可以为其他列中的所有对象调用此方法。 (从问题中不清楚,但我假设有一个包装类包含MyClassA-FMyContainerClass的实例,您将数据网格绑定到此包装类的集合。

答案 1 :(得分:1)

好的,这是我在盯着Eren的解决方案一段时间后所做的:我还为容器类实现了INotifyPropertyChanged,并为每个对象注册了PropertyChanged事件。

objA.PropertyChanged += updateCount;
objB.PropertyChanged += updateCount;
objC.PropertyChanged += updateCount;

......等等。然后我添加了以下方法

private void updateCount(object sender, PropertyChangedEventArgs e)
{
    OnPropertyChanged("Count");
}

现在我有我想要的行为。