创建DataContext比创建INotifyPropertyChanged更简单?

时间:2013-09-12 02:33:11

标签: wpf mvvm binding datacontext

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

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

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

所以我很好奇,有没有其他方法可以创建一个DataContext,例如,只是从某个类派生而且一切都已完成?

我知道如果datacontext是一个集合,有一个非常简单的方法,只需继承ObservableCollection<>,我认为这是一个非常好的解决方案。但是其他课程呢?

某些第三方框架?

3 个答案:

答案 0 :(得分:1)

您可以使用像Postsharp这样的AOP框架,它允许您简单地将一个属性放到您的类上,并为您生成所有INotifyPropertyChanged粘合代码。

答案 1 :(得分:1)

我已成功使用PostSharp为我的所有ViewModel轻松快速实现INotifyPropertyChanged。事实上,这实际上是使用Aspects的典型示例,如(当前)首页所示;

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

    public string FullName  
    {  
        get { return this.FirstName + " " + this.LastName; } 
    } 
} 

您可以在该网站上找到大量信息,告诉您如何执行此操作。

另一个(免费)替代方案可能是使用像Caliburn Micro这样的WPF / MVVM框架,其中包含{base}类型,如PropertyChangedBase,您可以从中继承ViewModel,并最小化代码复制。

答案 2 :(得分:0)

我一般不推荐这个,但我会在你不知道的情况下提到它:你实际上并不需要 来实现依赖属性或INotifyPropertyChanged来使数据绑定工作。当绑定到未实现INotifyPropertyChanged的类所拥有的非依赖属性时,WPF将自动通过PropertyDescriptor.AddValueChanged进行侦听。

不建议使用PropertyDescriptor是全局的,因此它与侦听目标之间的引用是永久性的,导致内存泄漏。查看此页面:http://support.microsoft.com/kb/938416

但是,如果您只是希望快速启动并运行演示/测试应用程序,则此功能完全正常。