在父级中访问子用户控件的数据上下文

时间:2012-03-02 11:21:20

标签: wpf data-binding mvvm

在我的WPF + MVVM应用程序中,我有一个托管另一个用户控件的View。子用户控件不遵循MVVM方式(因为我只是在那里托管一个Visio activeX对象),所以我正在使用类后面的代码。

在视图中我正在使用此代码:

<uc:VisioControl Grid.Row="2" x:Name="visioControlUC"
        VisioFileName="{Binding ElementName=tbFullFileName,Path=Text, UpdateSourceTrigger=PropertyChanged}"/>

在同一个视图中,我有一个Label元素,我希望在子元素用户控件上显示一个名为DependencyProperty SelectedNodeCustomProperties的字段值

<Label x:Name="lbNodeIdValue" DataContext="{Binding ElementName=visioControlUC}" Content="{Binding Path=SelectedNodeCustomProperties.Id, UpdateSourceTrigger=PropertyChanged}"/>

但是,这不起作用。在调试模式下运行我可以在Output窗口中看到这个绑定异常:

 BindingExpression path error: 'visioControlUC' property not found on 'object' ''NSDVizualizerViewModel' (HashCode=65573909)'. BindingExpression:Path=visioControlUC.SelectedNodeCustomProperties.NodeId; DataItem='NSDVizualizerViewModel' (HashCode=65573909); target element is 'Label' (Name=''); target property is 'Content' (type 'Object')

那么,为什么它期望在viewmodel中定义子用户控件?如何在绑定标签内容时将DataContext设置为用户控件?

谢谢,

阿德里安

编辑:对于向我提出问题的人,也许你能解释一下原因吗?在论坛上是否有类似的问题我可能没找到?

1 个答案:

答案 0 :(得分:1)

尝试

<Label x:Name="lbNodeIdValue" 
       Content="{Binding ElementName=visioControlUC, 
                         Path=SelectedNodeCustomProperties.Id,
                         UpdateSourceTrigger=PropertyChanged}"/>