我们假设我有这种约束力:
<TextBlock Text="{Binding MyBaseProperty.MySubProperty}" />
是否可以告诉WPF收听MyBaseProperty
的更改?每当MyBaseProperty
更改为MySubProperty
的{重新}查询MyBaseProperty
时,
这个问题背后的背景是:我有一个视图模型,它包含一个属性(MyBaseProperty
),指向一个没有实现INotifyPropertyChanged
接口的类的实例。但DataContext
的{{1}}确实会实现TextBlock
界面,因此可以向视图通知INotifyPropertyChanged
的更改。
如果您发现完成这种基于路径绑定的方式会很好,我可以绕过ValueConverters并使用MyBaseProperty
扩展我的ViewModel - 支持INotifyPropertyChanged
的Property包装器
答案 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}" />