如何仅绑定到路径的基础?
How to bind only to the base of a Path?
假设我有这个绑定:
<TextBlock Text="{Binding MyBaseProperty.MySubProperty}" />
是否可以告诉 WPF 监听对 MyBaseProperty
的更改?每当 MyBaseProperty
更改为(重新)查询 MySubProperty
of MyBaseProperty
?
这个问题背后的背景是:我有一个视图模型,其中包含一个 属性 (MyBaseProperty
) 指向一个 class 的实例,它没有实现 INotifyPropertyChanged
界面。但是,此 TextBlock
的 DataContext
确实实现了 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}" />
假设我有这个绑定:
<TextBlock Text="{Binding MyBaseProperty.MySubProperty}" />
是否可以告诉 WPF 监听对 MyBaseProperty
的更改?每当 MyBaseProperty
更改为(重新)查询 MySubProperty
of MyBaseProperty
?
这个问题背后的背景是:我有一个视图模型,其中包含一个 属性 (MyBaseProperty
) 指向一个 class 的实例,它没有实现 INotifyPropertyChanged
界面。但是,此 TextBlock
的 DataContext
确实实现了 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}" />