子属性更改时如何为属性提供更改通知?

时间:2013-11-25 22:26:49

标签: c# wpf binding

这是一个基本问题,但我不认为我之前已经完成了这个问题,尽管已经绑定了这么多属性。我原本打算将一个名为TimeScale的类绑定到各种对象上 在A类中,我们有一个依赖属性,我想调用更改通知。但是,更改通知不是通过此类手动完成的。

public TimeScale AxisTimeScale
{
    get { return (TimeScale)GetValue(AxisTimeScaleProperty); }
    set { SetValue(AxisTimeScaleProperty, value); }
}

public static readonly DependencyProperty AxisTimeScaleProperty =
    DependencyProperty.Register("AxisTimeScale",
        typeof(TimeScale), typeof(SignalPanel),
        new FrameworkPropertyMetadata(new TimeScale()));

这与源类B绑定

private class B
{
    private TimeScale _GraphTimeScale;

    public TimeScale GraphTimeScale
    {
        get { return _GraphTimeScale; }
        set
        {
            if (value != _GraphTimeScale)
            {
                _GraphTimeScale = value;
                OnPropertyChanged("GraphTimeScale");
            }
        }
    }
}

再看一遍我猜我真正想要的是在依赖属性上调用propertychanged,但由于我没有实现Inotifypropertychanged,我想知道我是怎么做到的。

我认为DependencyObject已经实现了Inotifypropertychanged,所以我可以访问:

OnPropertyChanged(new DependencyPropertyChangedEventArgs(property, old value, new value));

但是,在旧值和新值槽中插入相同的对象会导致PropertyChanged事件无法触发(我假设实现在触发事件之前检查这两个值是否相同)。我想尽可能避免创建一个新对象。我想一个选项是覆盖OnPropertyChanged。不,这也要求我有一个依赖属性propertychanged事件args。

2 个答案:

答案 0 :(得分:1)

更新

OnPropertyChanged("TimeScale");

OnPropertyChanged("GraphTimeScale");

或者,

您可以使用TimeScale包装ObservableObject类,以便您可以订阅对象更改事件并从那里提升它们。

更多信息:http://msdn.microsoft.com/en-us/library/ff653818.aspx

答案 1 :(得分:0)

订阅PropertyChanged的{​​{1}}通知,然后在属性更改事件处理程序中引发NumberOfUnits

如果有更好的方法会感兴趣。