私は現在MVVMで多くの作業を行っており、モデルの変更はWPFでINotifyPropertyChanged
のOnPropertyChanged
トリガーを必要とするためです。私はそのための短くていい解決策を模索しています。私の研究では、自動プロパティは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
この方法で、あなたのコードは、清潔で整然とです:私が使用して開始することをお勧め
質問に答えるには、プライベートフィールドにdynamicを使用しても問題ありません。また、アプリのパフォーマンスに大きな影響を与えるべきではありません。部分クラスを使用してフィールドを別のファイルに置くと、実際にそこに存在していることが隠され、後でプロジェクトを維持するために数か月後にあなたを混乱させる可能性があります。私はそれをしないだろう。 Piotrがモデル/ビューモデルのコードを単純化したいと答えた場合、Fodyのようなフレームワークがそれを提供します。 –