2013-11-25 101 views
2

这是一个基本问题,但我认为尽管绑定了很多属性,但我之前并没有这样做。我原本打算将一个名为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。不,那也需要我有一个依赖项属性被更改的事件参数。

+1

需要注意的是可以提高的属性与'null',如果你想说,所有属性值可能已经更改的属性名称更改。如果某些内容影响大量属性,并且您希望在应用所有更改后发送单个通知,而不是在每次部分更改时沿途逐渐通知,则这很有用。 –

回答

0

订阅PropertyChanged通知NumberOfUnits,然后在属性更改的事件处理程序中引发OnPropertyChanged("GraphTimeScale")

虽然有更好的方法,但会有兴趣。

1

更新

OnPropertyChanged("TimeScale"); 

OnPropertyChanged("GraphTimeScale"); 

或者,

你可以包装TimeScale类的ObservableObject,让您可以订阅对象变化事件,并从那里提出。

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

+0

我想我的问题没有足够的数据。试图修改它 –