繁体   English   中英

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

[英]How to bind a grid to a user control

我想创建一个类似于VLC的高级设置菜单的设置菜单:左侧为Treeview,右侧为某种控件集合。 右侧的控件应使用户能够操纵与树视图中的当前选择相关的设置。 我考虑过在树视图的右边创建一个网格。 然后,根据选择,我为每个需要在网格中显示的视图提供了一个用户控件

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

现在,我想将网格的内容绑定到我的SelectedItemUserControl属性。 但是我不知道该怎么做。 我宁愿使用基于XAML的解决方案,而不是清除网格的Children属性,并在每次SelectedItem属性更改时添加要在代码中显示的用户控件。

我建议使用ContentControl而不是Grid

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

在树视图的XAML中添加

SelectedItem="{Binding VMSelectedItem}"

在XAML中的内容控件

Content="{Binding VMSelectedItem.UserControl}"

现在,在树中进行选择将更新VMSelectedItem属性,该属性随后将更新内容控件的内容。

我建议您使用在资源字典中声明的DataTemplates。 您将只使用每个DataTemplate的一个实例,这会留下良好的内存占用。 您不需要将视图实例存储在视图模型中,这是mvvm的基本思想。 视图模型将完全只保存数据和信息,以及您希望如何显示数据。

例如,您的视图模型中有一个枚举,其值是person,car,tree。 在您的DataTemplateSelector内部,您将在该枚举上有一个if,该返回值将返回所需的DataTemplate。

基本上,您将所有事情都集中在了每个地方,而不是每个TreeViewItem都有。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM