C# 依赖属性如何工作?
我有下一个依赖属性:C# 依赖属性如何工作?,c#,wpf,dependency-properties,C#,Wpf,Dependency Properties,我有下一个依赖属性: public static DependencyProperty RequestObjectProperty = DependencyProperty.Register("RequestObject", typeof(RegistrationCardSearch), typeof(RegCardSearchForm),new UIPropertyMetadata(Changed)); private static void Changed(Dependen
public static DependencyProperty RequestObjectProperty = DependencyProperty.Register("RequestObject", typeof(RegistrationCardSearch), typeof(RegCardSearchForm),new UIPropertyMetadata(Changed));
private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MessageBox.Show("Property Changed!!!");
}
public RegistrationCardSearch RequestObject
{
get
{
return (RegistrationCardSearch)GetValue(RequestObjectProperty);
}
set
{
SetValue(RequestObjectProperty, value);
}
}
和“已更改”“方法,当我的依赖项属性更改时必须触发该方法。我的属性类型是RegistrashionCardSearch(类)。当我在dependency属性中更改类的属性值时,不会触发属性更改回调。为什么?My RegistrashionCardSearch类实现InotifyPropertyChanged接口仅当属性本身更改时,而不是当您更改此属性内的值时,才会触发更改事件。要给出导致已更改事件触发的示例,请执行以下操作:
var requestObject = myObject.RequestObject;
myObject.RequestObject = new RegistrationCardSearch() { ... };
此示例的最后一行将触发一个已更改事件,因为属性本身更改为另一个值
但是,当您执行类似操作时:
myObject.RequestObject.SomeProperty = newPropertyValue;
更改的事件不会触发,因为您没有更改RequestObject
属性本身,只有属性中的一些值。已经很好地解释了您的方法不起作用的原因。要使其工作,您需要订阅RequestObject的PropertyChanged
事件:
private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var form = (RegCardSearchForm)d;
if (e.OldValue != null)
((RegistrationCardSearch)e.OldValue).PropertyChanged -= form.RequestObject_PropertyChanged;
if (e.NewValue != null)
((RegistrationCardSearch)e.NewValue).PropertyChanged += form.RequestObject_PropertyChanged;
}
private void RequestObject_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
MessageBox.Show("Property " + e.PropertyName + " changed!");
}