如何仅绑定到路径的基础?

How to bind only to the base of a Path?

假设我有这个绑定:

 <TextBlock Text="{Binding MyBaseProperty.MySubProperty}" />

是否可以告诉 WPF 监听对 MyBaseProperty 的更改?每当 MyBaseProperty 更改为(重新)查询 MySubProperty of MyBaseProperty?

这个问题背后的背景是:我有一个视图模型,其中包含一个 属性 (MyBaseProperty) 指向一个 class 的实例,它没有实现 INotifyPropertyChanged 界面。但是,此 TextBlockDataContext 确实实现了 INotifyPropertyChanged 接口,因此可以通知视图有关 MyBaseProperty.

的更改

如果你发现完成这种基于路径的绑定方式,我可以绕过 ValueConverters 并使用 INotifyPropertyChanged 支持的 属性 包装器扩展我的 ViewModel,那就太好了MySubProperty.

这可能会为您解决问题,

您可以收听 MyBaseProperty Changed 事件以及何时发生..

您可以像这样强制绑定更新 --

BindingOperations.GetBindingExpressionBase(_myTextBox, TextBox.TextProperty).UpdateTarget();

我最终在我的视图模型中为 MySubProperty 创建了一个包装器。这个包装器定义如下:

public string MySubProperty
{
    get
    {
        return MyBaseProperty.MySubProperty;
    }
    set
    {
        MyBaseProperty.MySubProperty = value;
        FirePropertyChangedEvent("MySubProperty");
    }
}

我进一步添加了对 FirePropertyChangedEvent("MySubProperty"); 的调用到 MyBaseProperty setter:

private MyBasePropertyType _myBaseProperty;

public MyBasePropertyType MyBaseProperty
{
    get
    {
        return _myBaseProperty;
    }
    set
    {
        _myBaseProperty = value;
        FirePropertyChangedEvent("MyBaseProperty");
        FirePropertyChangedEvent("MySubProperty"); // also inform about changes to MySubProperty
    }
}

最后,我更改了视图以使用视图模型的 MySubProperty 包装器:

 <TextBlock Text="{Binding MySubProperty}" />