Wpf 创建DataContext的方法比实现INotifyPropertyChanged更简单?

Wpf 创建DataContext的方法比实现INotifyPropertyChanged更简单?,wpf,mvvm,binding,datacontext,Wpf,Mvvm,Binding,Datacontext,据我所知,创建DataContext类有两种常用方法,一种是实现INotifyPropertyChanged,另一种是从DependencyObject派生 很多人说实现INotifyPropertyChanged的第一种方法更简单,我也同意 但我并不完全同意,因为我认为即使实现INotifyPropertyChanged也不够简单,但非常繁琐,因为我必须为属性重写每个setter函数并触发事件,这主要是复制、粘贴和修改,我非常不喜欢。这不优雅 所以我很好奇,有没有其他方法来创建DataCont

据我所知,创建DataContext类有两种常用方法,一种是实现INotifyPropertyChanged,另一种是从DependencyObject派生

很多人说实现INotifyPropertyChanged的第一种方法更简单,我也同意

但我并不完全同意,因为我认为即使实现INotifyPropertyChanged也不够简单,但非常繁琐,因为我必须为属性重写每个setter函数并触发事件,这主要是复制、粘贴和修改,我非常不喜欢。这不优雅

所以我很好奇,有没有其他方法来创建DataContext,例如,从某个类派生,然后一切都完成了

我知道,如果datacontext是一个集合,有一个非常简单的方法来实现它,就是从ObservaleCollection继承,我认为这是一个非常好的解决方案。但是其他课程呢


一些第三方框架

您可以使用类似的AOP框架,它允许您在类中简单地添加一个属性,并为您生成所有的
INotifyPropertyChanged
粘合代码。

我已经成功地用于快速实现INotifyPropertyChanged,非常容易地为我的所有ViewModels实现。事实上,这确实是使用方面的典型例子,如(当前)头版所示

[NotifyPropertyChanged]  
public class Person  
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public string FullName  
    {  
        get { return this.FirstName + " " + this.LastName; } 
    } 
} 
你会在该网站上找到大量信息,向你展示如何做到这一点


另一个(免费)替代方案可能是使用WPF/MVVM框架,如,其中包括“基本”类型,如
PropertyChangedBase
,您可以从中继承ViewModels,并最大限度地减少代码重复

我一般不建议这样做,但如果您不知道的话,我会提到这一点:您实际上不需要实现依赖属性或INotifyPropertyChanged来实现数据绑定。当绑定到不实现INotifyPropertyChanged的类所拥有的非依赖性属性时,WPF将通过自动侦听

不建议使用它的原因是PropertyDescriptor是全局的,因此它与侦听目标之间的引用是永久的,从而导致内存泄漏。见本页:


然而,如果你只是想让一个演示/测试应用程序快速启动和运行,那么这就非常好了

看起来很诱人。您知道这种方法是如何影响性能的吗?乍一看,由于开发人员对它的控制较少,它可能会生成过多的“PropertyChanged”事件。Postsharp在编译时注入代码,因此唯一的性能开销是调用的事件处理程序。如果您有一个视图模型,很可能您的大多数属性都发生了属性更改事件。诚然,您对何时引发事件的控制较少,但您可能可以添加其他属性,因此它仅在值不同时才会引发事件。例如,感谢您提及这两个框架。经过一些研究后,我决定使用现在有效的。