これまでのところ、私のモデルは を実装INotifyPropertyChanged
しており、すべてのプロパティがこのイベントを発生させます。ほとんどすべての ViewModel は、PropertyChangedEventHandler
.
問題は、プロパティの変更がビューにとって重要ではない場合でも、モデルのすべての変更に対してこのハンドラーが呼び出されることです。
1 つのオプションは、イベントを発生させたプロパティを確認することです。ただし、PropertyName 文字列をテストするという考えは好きではありません。次のような呼び出しを使用して、モデルで既に回避したプロパティ名のハードコーディングが必要ですPropertyChanged.Notify(()=> PropertyName)
私が見る 2 番目のオプションは、すべてのプロパティに単一のイベントを実装することです。
public event PropertyChangedEventHandler LayerChanged;
public event PropertyChangedEventHandler FieldChanged;
public event PropertyChangedEventHandler LinkDictionaryChanged;
....
ベストプラクティスは何ですか? 私は2番目のオプションを好むでしょう。
編集:私はより具体的にしようとします
私のモデルクラスは次のように機能します:
public bool IsFeatureLayer
{
get { return _isFeatureLayer; }
set { PropertyChanged.ChangeAndNotify(ref _isFeatureLayer, value, () => IsFeatureLayer);}
}
または
PropertyChanged.Notify(() => LinkDictionary);
したがって、問題は通知呼び出しをより安全にする方法ではありません。プロパティの文字列名なしでこれを行うために拡張メソッドを既に使用しているためです。
問題は、文字列を使用せずに誰がイベントを呼び出したかを調べる方法です。
void _MCDAExtensionPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if(e.PropertyName.Equals("LinkDictionary"){
//event handling
}
}
モデルのプロパティの名前が変更される可能性があり、別の場所で修正する必要があるため、これは完全に安全ではありません。