У меня есть класс, который реализует INotifyPropertyChanged. Экземпляр этого класса объявляется как 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.
}