如何将网格绑定到用户控件

时间:2013-05-05 12:07:56

标签: c# wpf data-binding user-controls grid

我想创建一个类似于VLC高级设置菜单的设置菜单:左侧的Treeview和右侧的某种控件集合。右侧的控件应该允许用户操作与树视图中当前选择相关的设置。我想过在树视图右边创建一个网格。然后,我根据选择

为每个需要在网格中显示的视图设置用户控件

树视图中的项目具有UserControl属性,该属性包含对相关视图的引用。我的viewmodel有一个SelectedItem属性,指示当前选择树视图中的哪个项目。

现在我想将网格内容绑定到UserControl的{​​{1}}属性。但我无法弄清楚如何做到这一点。我更喜欢使用基于XAML的解决方案,而不是清除网格的SelectedItem属性,并在每次Children属性更改时添加我想要在代码中显示的用户控件。

2 个答案:

答案 0 :(得分:2)

我建议使用ContentControl代替Grid

考虑树视图和内容控件在同一视图模型下:在视图模型上,为树视图中的项目添加与所选项目(我们称之为VMSelectedItem)相同类型的属性。 / p>

在树视图的XAML中添加

SelectedItem="{Binding VMSelectedItem}"

在内容控件的XAML中

Content="{Binding VMSelectedItem.UserControl}"

现在树中的选择将更新VMSelectedItem属性,而后者将更新内容控件的内容。

答案 1 :(得分:0)

我建议你使用你在资源词中声明的DataTemplates。您将只使用每个DataTemplate的一个实例,它留下了很好的内存占用空间。您不需要在viewmodel中存储视图实例,这是mvvm的基本思想。 viewmodel将完全保存数据和信息,以便您希望数据显示。

例如,你的viewmodel中有一个enum,其中包含person,car,tree。在您的DataTemplateSelector中,您将在该枚举上返回if,返回所需的DataTemplate。

基本上你会把所有内容都集中在一起,而不是每个TreeViewItem都有。