检索绑定到元素值的标签的值

时间:2012-03-05 11:33:46

标签: wpf mvvm

在我目前的场景(WPF,MVVM)中,我有一个托管visio图的用户控件。此用户控件位于视图上,旁边是许多标签和datagrid元素。

用户控件包含DependencyProperty对象SelectedNode,该值使用从Visio图表接收的信息进行更新。标签的内容已绑定,以便显示SelectedNode中包含的信息(例如,ID,​​名称):

<Label Grid.Row="1" Grid.Column="1" x:Name="lbNodeIdValue" HorizontalAlignment="Left"
                                           Content="{Binding ElementName=visioControlUC, Path=SelectedNode.Id, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"/>

每次更改图表中的选择时,标签的内容都会按预期更改。

在此标签旁边,我想显示一个包含基于标签中显示的ID的信息的数据网格。这是我遇到问题的地方,因为我似乎无法在viewmodel类中获取标签的Content属性的值。

我尝试在标签的MultiBinding元素上使用Content属性,并使用Mode=OneWayToSource创建第二个绑定,以将标签Content的值设置为我在viewmodel类中定义的属性。

在viewmodel类中检索此值的正确方法是什么?

谢谢, 阿德里安

1 个答案:

答案 0 :(得分:1)

理想情况下,您的Datagrid的ViewModel应该从另一个ViewModel获取所选标签的值。您不应该依赖ViewsViewModels之间传输应用程序数据。

听起来SelectedNode值来自UserControl,而不是ViewModel,因此您需要将UserControl.SelectedNodeId绑定到ViewModel某处,因此ViewModel可以访问此数据

<local:myUserControl x:Name="visioControlUC" 
                     SelectedNode="{Binding SelectedNodeId}" />

如果多个ViewModel需要该值,我强烈推荐某种事件系统,例如MVVM Light的Messenger或Prism的EventAggregator。这样,您的ViewModels就可以订阅类似SelectedNodeChangedEventMessage的内容,实际包含ViewModel的{​​{1}}可以在值发生变化时随时广播该消息。你可以在我的博文中找到关于Communication between ViewModels的一个例子。