据我所知,创建DataContext类有两种常用方法,一种是实现INotifyPropertyChanged,另一种是从DependencyObject派生。
很多人说实现INotifyPropertyChanged的第一种方式更简单,我同意。
但我完全不同意,因为我认为即使实现INotifyPropertyChanged也不够简单但非常繁琐,因为我必须为属性重写每个setter函数并触发事件,它主要是复制和放大。粘贴&修改一些我不喜欢的东西。它不优雅。
所以我很好奇,有没有其他方法可以创建一个DataContext,例如,只是从某个类派生而且一切都已完成?
我知道如果datacontext是一个集合,有一个非常简单的方法,只需继承ObservableCollection<>,我认为这是一个非常好的解决方案。但是其他课程呢?
某些第三方框架?
答案 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
但是,如果您只是希望快速启动并运行演示/测试应用程序,则此功能完全正常。