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を実装するクラスを見つけて、変換します。

PostSharpよりもFodyを好む理由は、FodyがILをアセンブリに追加してから、それ自体をクリーンアップするため、Fodyやその他のアセンブリに依存せず、コードが自己完結しているためです。PostSharpはインターセプターを追加するだけです。インターセプターはPostSharpライブラリを呼び出し、追加したインターセプターに戻ります。これは実行時に遅くなり、PostSharpライブラリに依存する必要があります。

PlusFodyは無料でオープンソースです。

于 2013-01-25T05:19:57.623 に答える
2

コンパイル後に IL を変更するアプリケーション ( PostSharp など) を使用するか、実行時に依存関係の挿入を使用して、この効果を実現できます( INotifyPropertyChanged の史上最高の実装を参照)。前者は実際に IL を生成しますが (無料ではありません)、後者は IL を変更したり何も生成したりしませんが、代わりにイベント セッターをインターセプトし、PropertyChanged イベントを発生させます。

余談ですが、WPF MVVM を実行している場合は、INPC と依存関係プロパティのパフォーマンスを確認する必要があります。後者がかなり速いことを示すタイミングを見てきました。

于 2013-01-25T02:54:16.233 に答える