2

如多篇文章所述,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");
         }
      }
   }
}

谢谢

4

2 回答 2

3

PropertyChanged.Fody是我用来处理这个问题的。

它已经从大多数 MVVM 框架中识别出基类,并调用适当的方法来进行通知。否则,它会找到任何实现 INPC 的类并为您转换它。

我更喜欢 Fody 而不是 PostSharp 的原因是 Fody 将 IL 添加到您的程序集中,然后自行清理,因此您不依赖 Fody 或任何其他程序集,并且您的代码是自包含的。PostSharp 只是添加拦截器,然后调用 PostSharp 库,然后返回到您添加的任何拦截器。这在运行时速度较慢,您需要依赖 PostSharp 库。

Plus Fody 是免费和开源的。

于 2013-01-25T05:19:57.623 回答
2

您可以使用在编译后修改 IL 的应用程序(如PostSharp)或在运行时使用依赖注入来实现此效果(请参阅INotifyPropertyChanged Ever 的最佳实现)。前者实际上生成 IL(但不是免费的),后者不会更改您的 IL 或生成任何东西,而是拦截您的事件设置器并为您引发 PropertyChanged 事件。

顺便说一句,如果你在做 WPF MVVM,你应该检查 INPC 与依赖属性的性能。我已经看到时间表明后者要快得多。

于 2013-01-25T02:54:16.233 回答