我有一个实现了INotifyPropertyChanged接口的类。这个类的一个实例被声明为一个Window中的DependencyProperty,例如:
public IMyClass MyClass
{
get { return (IMyClass)GetValue(MyClassProperty); }
set { SetValue(MyClassProperty, value); }
}
public static readonly DependencyProperty MyClassProperty=
DependencyProperty.Register("MyClass", typeof(IMyClass), typeof(MainWindow), new UIPropertyMetadata(null));
在 XAML 中,我有一个元素,使用绑定到这个类Text="{Binding MyClass, Converter={StaticResource someConverter}}
每当我更改 MyClass 中的属性时,我希望会触发 someConverter。但是它只会在完全交换 MyClass 时发生。有没有一种方法将 DependencyProperty 更新与我的 MyClass PropertyChanged 相关联?
更新:以 AresAvatar 解决方案的精神为基础,这是我们目前的情况。剩下的问题是如何调用 InvalidateProperty(而不必让 MyClass 追踪它……) public IMyClass MyClass
{
get { return (IMyClass)GetValue(MyClassProperty); }
set { SetValue(MyClassProperty, value); }
}
public static readonly DependencyProperty MyClassProperty =
DependencyProperty.Register("MyClass", typeof(IMyClass), typeof(MainWindow),
new UIPropertyMetadata(null, new PropertyChangedCallback(OnMyClassChanged)));
private static void OnMyClassChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.OldValue != null)
{
((IMyClass)e.OldValue).PropertyChanged -= ((MainWindow)d).MyClass_PropertyChanged;
}
if (e.NewValue != null)
{
((IMyClass)e.NewValue).PropertyChanged += ((MainWindow)d).MyClass_PropertyChanged;
}
}
private void MyClass_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
this.InvalidateProperty(MyClassProperty); <----- still does not refresh binding, but called.
}