MVVM涉及大量编写样板代码,如多篇文章中所述。许多快捷方式似乎提供运行时评估,但我想知道是否有一个免费的实用程序,它使用反射来生成c#代码,即:
Class A
{
int I {get;set;}
ICollection C {get; set;}
}
会给我一个包含
之类的文件或剪贴板Class ViewModelA : INotifyPropertyChanged
{
readonly A _a;
private ObservableCollection _c;
ViewModelA(ClassA a)
{
_a=a;
_c=new ObservableCollection(a.C);
}
int I
{
get {return _a.I;}
set
{
(if _a.I != value)
{
_a.I = value;
NotifyPropertyChanged("I");
}
}
}
}
由于
答案 0 :(得分:3)
PropertyChanged.Fody是我用来处理这个问题的。
它已经识别出大多数MVVM框架中的基类,并调用适当的方法进行通知。否则它会找到任何实现INPC的类并为你转换它。
我更喜欢Fody而不是PostSharp的原因是Fody将IL添加到你的程序集中,然后清理自己,所以你不依赖于Fody或任何其他程序集,你的代码是自包含的。 PostSharp只添加了拦截器,然后调用PostSharp库,然后返回到你添加的任何拦截器。这在运行时较慢,您需要依赖PostSharp库。
Plus Fody是免费开源的。
答案 1 :(得分:2)
您可以使用在编译后修改IL的应用程序(如PostSharp)或在运行时使用依赖注入来实现此效果(请参阅The Best Implementation of INotifyPropertyChanged Ever)。前者实际上生成IL(但不是免费的),后者不会更改您的IL或生成任何内容,而是拦截您的事件设置器并为您引发PropertyChanged事件。
顺便说一句,如果您正在使用WPF MVVM,则应该检查INPC与依赖项属性的性能。我已经看到时间表明后者的速度要快得多。