0

显然,我不是 C# 方面的专家。我想通过使用匿名处理程序或 lambda 来简化此代码,不确定。ValueHasChangedPropertyChangedCallback在 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() {...}
4

1 回答 1

0

做你所做的没有错。它可能看起来“不优雅”,但它是可读的。可读性比优雅更重要。可能还有其他解决方案,但是对于其他编码人员来说(或者从现在起 6 个月后让你理解),它们都会更加令人困惑。

坚持你所拥有的。

于 2010-07-23T16:39:42.527 回答