【问题标题】:Inheriting from one base class that implements INotifyPropertyChanged从一个实现 INotifyPropertyChanged 的​​基类继承
【发布时间】:2011-04-15 19:25:44
【问题描述】:

我一直在以千篇一律的方式在几十个类中使用以下代码

public event PropertyChangedEventHandler PropertyChanged;

protected void NotifyPropertyChanged(string propertyName)
{
   if (PropertyChanged != null)
   {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
   }
}

所有这些类都实现了INotifyPropertyChanged。为了使我的 DRY 警报静音,最近我一直在重构这些类以继承我的基类 PropertyNotifier,其唯一目的是为从它继承的类提供 NotifyPropertyChanged——这是我的数十个 ViewModel 类巨大的工程。

感觉很懒,有点脏。我是在损害性能还是破坏了良好的设计实践?我想如果更改通知应该这么简单,那么 WPF 框架中已经有一个基类可以完成我的 PropertyNotifier 类的工作。

请注意,由于很多原因,我的 UI 响应能力一直存在性能问题 - 主要是由于大量控件。所以我想尽可能地减少脂肪。有什么想法吗?

【问题讨论】:

    标签: c# .net wpf mvvm inotifypropertychanged


    【解决方案1】:

    这是 WPF 或 Silverlight 开发中非常常见的基类,不会显着影响性能。我将PropertyNotifier 作为基类的唯一问题是仅限于单继承,但这对于您需要它的类类型来说往往是一个罕见的问题。

    【讨论】:

    • 感谢您的安慰:D
    【解决方案2】:

    是的,这是非常普遍的做法。对于大规模应用程序,有必要拥有这种基类。为了同样的目的,我们还创建了一个BaseViewModel;我们还在这个基类中实现了很多通用代码(跨 ViewModel),例如日志记录、显示错误消息、初始化 WCF 代理对象等。

    【讨论】:

    • 我知道人们在使用它们,但我最终得到了一个类似的 BaseViewModel 有点意外。在 WPF 和 Entity Framework 之间放置一个 VM 基类真是太好了。它为我节省了大量的工作。我主要使用我的从 EF ObjectSet 生成 ObservableCollection,并跟踪添加/删除新 T 和 SelectedItem T 以及属性通知,如您指出的初始化、代理对象等跨度>
    【解决方案3】:

    另一个实现是 WPF Application Framework (WAF)Model 类。完全一样。

    【讨论】:

    • 感谢发布这个 jbe,这看起来是一个很棒的框架。好像我重新发明了轮子!
    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2016-01-13
    • 2023-03-18
    • 2011-09-12
    相关资源
    最近更新 更多