Очевидно, я не эксперт в C #. Я хотел бы упростить этот код с помощью анонимного обработчика, или, возможно, лямбда-выражения, не уверен. ValueHasChanged
- это PropertyChangedCallback
, используемый при изменении dp, он гарантирует, что новый объект будет отслеживаться на предмет обновления, поэтому и изменения, и обновления будут обрабатываться с использованием одного и того же кода: ProcessNewValue
. Жаль, что здесь создается второй обработчик ValueHasBeenUpdated
только для вызова того же метода. Есть ли возможность убрать определение 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() {...}