2017-08-03 19 views
0

私は現在MVVMで多くの作業を行っており、モデルの変更はWPFでINotifyPropertyChangedOnPropertyChangedトリガーを必要とするためです。私はそのための短くていい解決策を模索しています。私の研究では、自動プロパティはOnPropertyChangedをそれ自身のものにすることはできません。したがって、すべてのプロパティにフィールドを追加する必要があります。 私は現在持ってたくさん私を助け、私の抽象クラスでChangeProperty-Methodeの: MVVMのパブリックプロパティのプラクティス

public abstract class PropertyExtension : INotifyPropertyChanged 
{ 
    protected void ChangeProperty<T>(T value, ref T field, [CallerMemberName] string property = "") 
     { 
      if ((value!= null) && (!value.Equals(field))) 
      { 
       field = value; 
      } 
      if (property != "") 
      { 
       this.OnPropertyChanged(property); 
      } 

     } 
... 
} 

これまでのところ、これはかなり良い働いていると、それは私に多くの時間を節約できます。しかし、私はこれを自動プロパティで使用することはできません。したがって、フィールドがまだ必要とされる:
private int _ItemNumber; 
    public int ItemNumber 
    { 
     get { return _ItemNumber; } 
     set { ChangeProperty(value, ref _ItemNumber); } 
    } 

だからポイントは次のとおりです。私は、プロパティのタイプを変更したときに、私は、同様のフィールドを変更する必要があります。私の考えでは、動的にフィールドを変更しました:

private dynamic _ItemNumber; 
    public int ItemNumber 
    { 
     get { return _ItemNumber; } 
     set { ChangeProperty(value, ref _ItemNumber); } 
    } 

これは、これまでに出て働いていると私はすべてのエラーを見つけることができません。私の質問です:これは良い練習ですか?何か不足していますか?ダイナミックイベントはこれに適していますか?パフォーマンスに影響を与えますか?メモリ使用量に影響しますか? 私の目標は、メンテナンス可能なコードを簡単に作成することです。たとえば、実際のモデルをきれいに保つためには、すべてprivate dynamic -fieldsだけの部分クラスを持つことができます。どんなフィードバックも必要です。 - それは

あなたは理論的なMVVMモデルだ:)すると仮定としてPropertyChanged.Fody :)

https://github.com/Fody/PropertyChanged

この方法で、あなたのコードは、清潔で整然とです:私が使用して開始することをお勧め

+0

質問に答えるには、プライベートフィールドにdynamicを使用しても問題ありません。また、アプリのパフォーマンスに大きな影響を与えるべきではありません。部分クラスを使用してフィールドを別のファイルに置くと、実際にそこに存在していることが隠され、後でプロジェクトを維持するために数か月後にあなたを混乱させる可能性があります。私はそれをしないだろう。 Piotrがモデル/ビューモデルのコードを単純化したいと答えた場合、Fodyのようなフレームワークがそれを提供します。 –

答えて

2

public class ViewModel 
    { 
     public int ItemNumber { get; set; } 
    } 

Lets PropertyChanged.Fodyはあなたのために休息します。

関連する問題