我有一个类(我们称之为MyContainerClass
),它是其他几个类的容器(让我们称它们为ClassA
到ClassF
)。 ClassA
到ClassF
继承相同的基类(我们称之为MyBaseClass
)。在MyBaseClass
中,我有一个名为Count
的int属性,ClassA
到ClassF
继承。我在MyContainerClass
中也有一个同名的int属性,它是ClassA
到ClassF
的总和。
然后我有一个datagrid,每行有一个MyContainerClass
对象。网格的列显示ClassA
到ClassF
。网格中的最后一列显示总计(即绑定Count
的{{1}}属性。现在,我希望在更改A-F范围内任何类中的MyContainerClass
属性后,最后一列中的总数会更新。我在Count
中实施了INotifyPropertyChanged,当我将MyBaseClass
中的Count
属性更改为ClassA
时,它会触发。但我的数据网格中的最后一列保持不变。有线索吗?
修改 我创建了一个类图。
getCount()方法返回objA.Count + objB.Count + ... + objF.Count,并由ClassF
中的Count
属性返回。问题是:如果我更新objA.Count,我希望GUI(我的数据网格中的列)显示更新的总和。
答案 0 :(得分:3)
仅实施INotifyPropertyChanged
不足以进行自动更新。 MyContainerClass
对象需要“订阅”其他列中MyBaseClass
个对象的更改通知。解决此问题的一种方法是在MyContainerClass
:
void SubscribeToCount(MyBaseClass item)
{
item.PropertyChanged += (s,e) =>
this.Sum += (e.NewValue - e.OldValue);
}
您可以为其他列中的所有对象调用此方法。 (从问题中不清楚,但我假设有一个包装类包含MyClassA-F
和MyContainerClass
的实例,您将数据网格绑定到此包装类的集合。
答案 1 :(得分:1)
好的,这是我在盯着Eren的解决方案一段时间后所做的:我还为容器类实现了INotifyPropertyChanged,并为每个对象注册了PropertyChanged
事件。
objA.PropertyChanged += updateCount;
objB.PropertyChanged += updateCount;
objC.PropertyChanged += updateCount;
......等等。然后我添加了以下方法
private void updateCount(object sender, PropertyChangedEventArgs e)
{
OnPropertyChanged("Count");
}
现在我有我想要的行为。