Как распространять изменения PropertyChanged в DependencyProperty

У меня есть класс, который реализует 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. Однако это происходит только тогда, когда я полностью меняю местами out 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.
    }
11
задан H.B. 1 July 2011 в 01:38
поделиться