C #, упрощенный код для обработки как изменений, так и обновлений свойства зависимостей - PullRequest
0 голосов
/ 23 июля 2010

Очевидно, я не эксперт в 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() {...}

1 Ответ

0 голосов
/ 23 июля 2010

Ничего плохого в том, что вы сделали. Это может показаться «не элегантным», но это читабельно. Читаемость важнее элегантности. Могут быть другие решения, но все они будут более запутанными для понимания другими программистами (или для вас, чтобы понять через 6 месяцев).

Придерживайтесь того, что у вас есть.

...