6

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

然后我有一个数据网格,每一行都有一个MyContainerClass. 网格的列显示ClassAClassF。网格中的最后一列显示总计(即它与 的Count属性绑定MyContainerClass)。现在,我希望在更改CountAF 范围内的任何类中的属性后,最后一列中的总数会立即更新。我实现了 INotifyPropertyChanged ,MyBaseClass当我将Count属性 更改ClassAClassF. 但是我的数据网格中的最后一列保持不变。有什么线索吗?

编辑: 我创建了一个类图。在此处输入图像描述

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

4

2 回答 2

4

仅仅实施INotifyPropertyChanged是不够的自动更新。该MyContainerClass对象需要“订阅”MyBaseClass其他列中对象的更改通知。处理此问题的一种方法是向 : 添加如下方法MyContainerClass

void SubscribeToCount(MyBaseClass item)
{
    item.PropertyChanged += (s,e) => 
        this.Sum += (e.NewValue - e.OldValue); 
}

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

于 2012-11-14T10:06:00.140 回答
1

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

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

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

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

现在我有了我想要的行为。

于 2012-11-14T12:00:01.543 回答