C# 从实现INotifyPropertyChanged的一个基类继承

C# 从实现INotifyPropertyChanged的一个基类继承,c#,.net,wpf,mvvm,inotifypropertychanged,C#,.net,Wpf,Mvvm,Inotifypropertychanged,我已经在几十个类中以一种千篇一律的方式使用了以下代码 public event PropertyChangedEventHandler PropertyChanged; protected void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyNa

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

public event PropertyChangedEventHandler PropertyChanged;

protected void NotifyPropertyChanged(string propertyName)
{
   if (PropertyChanged != null)
   {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
   }
}
所有这些类都实现了
INotifyPropertyChanged
。为了消除我的枯燥警报,最近我一直在重构这些类,以继承我的基类
PropertyNotifier
,它的唯一目的是为继承自它的类提供
NotifyPropertyChanged
,这些类是我庞大项目中的几十个
ViewModel

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


请注意,由于很多原因,我的UI响应性一直存在性能问题——主要是由于大量的控件。所以我希望尽我所能修剪脂肪。有什么想法吗?

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

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

另一个实现是模型类。这完全是一样的。

谢谢你的安慰:DI知道人们在使用它们,但我意外地得到了类似的BaseViewModel。在WPF和实体框架之间放置一个基本VM类真的很好。这为我节省了大量的工作。我使用我的主要功能是从EF ObjectSet生成一个ObservableCollection,并跟踪添加/删除新的Ts和SelectedItem T,以及属性通知—您指出的初始化、代理对象等—发布此jbe的方法,这看起来是一个很棒的框架。好像我重新发明了轮子!