这是一个基本问题,但我不认为我之前已经完成了这个问题,尽管已经绑定了这么多属性。我原本打算将一个名为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。
答案 0 :(得分:1)
更新
OnPropertyChanged("TimeScale");
到
OnPropertyChanged("GraphTimeScale");
或者,
您可以使用TimeScale
包装ObservableObject
类,以便您可以订阅对象更改事件并从那里提升它们。
答案 1 :(得分:0)
订阅PropertyChanged
的{{1}}通知,然后在属性更改事件处理程序中引发NumberOfUnits
。
如果有更好的方法会感兴趣。