明らかに、私は C# の専門家ではありません。匿名ハンドラー、またはおそらくラムダを使用して、このコードを簡素化したいのですが、わかりません。ValueHasChanged
はPropertyChangedCallback
dp が変更されたときに使用され、新しいオブジェクトの更新が監視されるようにするため、変更と更新の両方が同じコードを使用して処理されます: ProcessNewValue
. ここで残念なのはValueHasBeenUpdated
、同じメソッドを呼び出すためだけに 2 番目のハンドラーを作成することです。の定義を削除する可能性はありValueHasBeenUpdated
ますか? ありがとう。
private static void ValueHasChanged(
DependencyObject sender, DependencyPropertyChangedEventArgs args) {
// get instance
MyClass1 instance = sender as MyClass1;
// unregister on old object
if (args.OldValue != null) (args.OldValue as MyClass2).PropertyChanged -=
instance.ValueHasBeenUpdated;
// register for updates on new object
if (args.NewValue != null) (args.NewValue as MyClass2).PropertyChanged +=
instance.ValueHasBeenUpdated;
// process new value anyway
instance.ProcessNewValue();
}
// value has been updated
private void ValueHasBeenUpdated(object sender, PropertyChangedEventArgs e) {
// just call the actual method that will process it, not elegant...
ProcessNewValue();
}
// process any new or updated object
private void ProcessNewValue() {...}