两个用户控件之间的WPF数据绑定

时间:2013-06-03 19:35:42

标签: wpf

我会尝试提供这个问题的更多细节 在WPF应用程序中,在'mainwindow'的左侧,我有一个包含listBox的UserControl,就像这样

<UserControl.Resources>
    <ObjectDataProvider x:Key="viewModel" ObjectType="{x:Type vm:TemplateListViewModel}"/>
</UserControl.Resources>   
<StackPanel>
    <ListBox Height="Auto" Name="TemplateList"  ItemsSource="{Binding Source={StaticResource viewModel}, Path=TemplateNames}"     
</StackPanel>

如图所示,通过viewModel从xml文件中获取列表框项。 现在我有另一个包含Label的usercontrol2来回显“TemplateList”中的选择。 另外这个标签下,我有一个包含一个DataGrid,该数据将从基于标签,或从窗口的左侧列表框通过usercontrol3的视图模型的选择上xml文件中获取另一usercontrol3。 那么问题是如何将“SelectedItem”或“SelectedIndex”传递给Label和datagrid的viewModel? 我知道当我将标签绑定到带有'elementName'和Path to'SelectedItem'的列表框时,它可以正常工作。现在我无法弄清楚如何处理usercontrols和'ObjectDataProvider'。我按照下面的建议尝试无法解决问题。到目前为止对于usercontrol2,如果我使用与上面相同的ObjectDataProvider,我可以将此标签用作

<Label Name="TemplateNameLabel" Content="{Binding Source={StaticResource viewModel}, Path=TemplateNames[0]}" />

其中'TemplateNames'类型为'XmlNodeList',因为它是从xml文件中读取的。但我真的想要的是

<Label Name="TemplateNameLabel" Content="{Binding Source={StaticResource viewModel}, Path=TemplateNames[SelectedIndex]}" />

这可以在没有任何命令的情况下完成,就像绑定到'elementname'而不涉及usercontrol一样吗? 感谢。

1 个答案:

答案 0 :(得分:0)

我删除了不重要的属性以突出显示主要内容:

 <ListBox Name="TemplateList" ItemsSource="{Binding Source={StaticResource viewModel}, Path=TemplateNames}" SelectedItem="{Binding Path=SelectedTemplate, Mode=OneWayToSource}" /> 

请注意,您需要使用 TemplateName 类型的公共设置器的 SelectedTemplate 属性 - 与 TemplateNames ViewModel 中的集合。在该setter中,您可以将值传递给您需要的任何其他视图模型。