【问题标题】:INotifyPropertyChanged: Notify another classINotifyPropertyChanged:通知另一个类
【发布时间】:2012-11-02 19:14:41
【问题描述】:

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

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

编辑: 我创建了一个类图。

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

【问题讨论】:

  • 你说datagird保持不变,但是属性本身会改变吗?换句话说-您是否检查了MyContainerClass 中的Count 属性是否已更新?
  • 如果您可以为您的课程发布一些 XAML 和一些源代码,那么诊断问题所在会更容易!
  • @Blachshma,它已更新。如果我检查调试器中的对象,我总是会看到正确的数字。只有 GUI 不会更新。
  • @StephenHolt,我必须更改很多代码才能创建一个通用示例。但是我创建了一个类图。我希望这会有所帮助。

标签: wpf data-binding datagrid inotifypropertychanged


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 太好了,这几乎是我现在了解您的问题后建议的那种解决方案!我认为您可以将自己的答案标记为已接受的答案吗?
  • 而不是 updateCount 你的意思是 updateSum 而不是 OnPropertyChanged("Count") 你的意思是 OnPropertyChanged("Sum"),因为 Sum MyContainerClass 中的属性只是更好的名称。
【解决方案2】:

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

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

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

【讨论】:

  • 这解决了我遇到的同样问题,我需要一个(最初是计算的)属性来通知对不同类的更改。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多