【问题标题】:Implementing INotfyPropertyChanged for calculated properties为计算的属性实现 INotfyPropertyChanged
【发布时间】:2012-07-28 21:41:09
【问题描述】:

我对 MVVM 有点陌生,想知道

假设我定义了一个ObservableCollection<Differences> Diffs 属性。 我还有以下属性:

public bool IsSame
{
    get
    {
         return Diffs.Count == 0;
    }
 }

我不明白我应该如何为 IsSame 实现 OnPropertyChanged,因为它隐含在 Diff 列表中。

  • 我应该附加到列表OnCollectionChanged 事件然后检查它是否更改IsSame 吗?
  • 我是否应该使用支持字段并处理列表OnCollectionChanged

非常感谢。

【问题讨论】:

    标签: c# wpf mvvm inotifypropertychanged inotifycollectionchanged


    【解决方案1】:

    我是否应该使用支持字段并处理 List OnCollectionChanged?

    要正确地做到这一点:是的。

    当相关属性发生变化时,由源来引发所有事件。您的主要问题是检测IsSame 何时实际更改(即从1 变为0 或从0 变为1)。您需要一个支持字段,或者您将更频繁地引发事件(更多)然后需要。

    【讨论】:

    • 艰难的选择。额外的支持字段会使对象大小膨胀并可能会损害性能。不必要的事件会导致不必要的内存分配,这也会损害性能。
    • @JonathanAllen - 将 1 int 添加到列表中应该是明显的赢家。
    【解决方案2】:

    当您收集更改时,您应该调用 OnPropertyChanged("IsSame"); - 这是正确的。但何时调用取决于您的视图模型逻辑。

    编辑:假设您有一个添加和删除命令,那么您必须调用 OnPropertyChanged("IsSame");在这些方法中。

    【讨论】:

    • 应该注意OnCollectionChangedif ((action == remove && collection.count == 0) || (action == add && collection.count == 1)) Raise("IsSame")
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2013-05-22
    • 2018-07-29
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多