OK,所以我有这个控件有两个属性。其中一个是DependencyProperty,另一个是第一个的“别名”。我需要做的是在第一个更改时为第二个(别名)提高PropertyChanged事件。
注意:我使用DependencyObjects,而不是INotifyPropertyChanged(试过,没有工作,因为我的控制是一个子类ListView)
这样的东西…..
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) { base.OnPropertyChanged(e); if (e.Property == MyFirstProperty) { RaiseAnEvent( MySecondProperty ); /// what is the code that would go here? } }
如果我使用INotify我可以这样做…
public string SecondProperty { get { return this.m_IconPath; } } public string IconPath { get { return this.m_IconPath; } set { if (this.m_IconPath != value) { this.m_IconPath = value; this.SendPropertyChanged("IconPath"); this.SendPropertyChanged("SecondProperty"); } } }
其中我可以从一个setter对多个属性引发PropertyChanged事件。我需要能够做同样的事情,只使用DependencyProperties。
>在你的类中实现INotifyPropertyChanged。
>在注册依赖属性时,在属性元数据中指定回调。
>在回调中,提高PropertyChanged事件。
>在注册依赖属性时,在属性元数据中指定回调。
>在回调中,提高PropertyChanged事件。
添加回调:
public static DependencyProperty FirstProperty = DependencyProperty.Register( "First",typeof(string),typeof(MyType),new FrameworkPropertyMetadata( false,new PropertyChangedCallback(OnFirstPropertyChanged)));
在回调中升级PropertyChanged:
private static void OnFirstPropertyChanged( DependencyObject sender,DependencyPropertyChangedEventArgs e) { PropertyChangedEventHandler h = PropertyChanged; if (h != null) { h(sender,new PropertyChangedEventArgs("Second")); } }