【问题标题】:ObservableObject or INotifyPropertyChanged on ViewModelsViewModel 上的 ObservableObject 或 INotifyPropertyChanged
【发布时间】:2012-04-10 17:06:56
【问题描述】:

我很好奇 ViewModels 的最佳用途是什么。是实现接口INotifyPropertyChanged还是从ObservableObject派生更好。

ObservableObject 类实现 INotifyPropertyChanged 并执行一些无聊的代码,例如 RaisePropertyChanged

INotifyPropertyChanged 需要实现PropertyChanged 事件。

在我看来,使用ObservableObject 似乎更合乎逻辑,但在大部分教程中,他们在ViewModel 上实现了INotifyPropertyChanged 接口。

你认为这是为了简单还是有逻辑的原因?

【问题讨论】:

    标签: c# wpf visual-studio-2010


    【解决方案1】:

    ObservableObject 是 Microsoft.Practices.Composite.Presentation 的一部分 - 即 Prism。它也在MVVM LightMVVM Foundation 中实现。

    INotifyPropertyChanged 是 System.ComponentModel 的一部分 - 即它在核心库中。

    因此,如果您尚未包含 Prism 或其他框架之一,我会坚持使用 INotifyPropertyChanged。仅仅为了获得这一门课而包含它似乎没有什么意义。

    【讨论】:

    • 我相信在 MVVM Light 中也实现了一个 ObserveableObject。
    • 确实如此。我正在查看一些已经使用 MVVM Light 制作的项目(编辑我混淆了框架)。所以在我的情况下,我可能想要使用它。谢谢。
    【解决方案2】:

    我想说的是,如果您要实现很多 ViewModel,那么实现 INotifyPropertyChanged 需要大量的管道代码,您最好创建自己的 ViewModel 基类,或者使用一个MVVM 框架为您提供的那些(MVVM Light 是我选择的框架)。

    否则,你真的不是很“干”(不要重复自己)。

    编辑 - 一个意外的想法

    请记住,ObservableObject 通常只是 ViewModel 类相同基本功能的轻量级实现,为您提供 INPC,但省略了您可能在完整 ViewModel 中使用的一些其他内容。

    【讨论】:

      【解决方案3】:

      一般来说,在所有其他条件相同的情况下,我建议采用实现接口而不是从祖先类派生的方法。你可以实现任意数量的接口,但你只有一个父级,所以我更喜欢“明智地”使用我的父级。如果我可以得到我想要实现的接口,我更愿意让我的选项稍后继承。

      【讨论】:

      • 对于 ObservableObject 之类的东西,如果你从这个继承,然后需要从另一个类继承,你可以确保新的超类继承自 ObservableObject。
      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2010-10-20
      • 2023-04-02
      • 2022-08-03
      • 2017-03-09
      • 1970-01-01
      相关资源
      最近更新 更多