如何仅绑定到Path的基础?

时间:2015-03-16 23:20:21

标签: wpf data-binding

我们假设我有这种约束力:

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

是否可以告诉WPF收听MyBaseProperty的更改?每当MyBaseProperty更改为MySubProperty的{​​重新}查询MyBaseProperty时,

这个问题背后的背景是:我有一个视图模型,它包含一个属性(MyBaseProperty),指向一个没有实现INotifyPropertyChanged接口的类的实例。但DataContext的{​​{1}}确实会实现TextBlock界面,因此可以向视图通知INotifyPropertyChanged的更改。

如果您发现完成这种基于路径绑定的方式会很好,我可以绕过ValueConverters并使用MyBaseProperty扩展我的ViewModel - 支持INotifyPropertyChanged的Property包装器

2 个答案:

答案 0 :(得分:0)

这可能会为你解决,

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

您可以强制执行此类绑定更新 -

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

答案 1 :(得分:0)

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

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

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

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}" />