[英]How to bind command on entire Grid LeftClick in WPF User Control
[英]How to bind a grid to a user control
我想创建一个类似于VLC的高级设置菜单的设置菜单:左侧为Treeview,右侧为某种控件集合。 右侧的控件应使用户能够操纵与树视图中的当前选择相关的设置。 我考虑过在树视图的右边创建一个网格。 然后,根据选择,我为每个需要在网格中显示的视图提供了一个用户控件
树视图中的项目具有UserControl
属性,该属性包含对相关视图的引用。 我的视图模型具有SelectedItem属性,该属性指示当前在树视图中选择的项目。
现在,我想将网格的内容绑定到我的SelectedItem
的UserControl
属性。 但是我不知道该怎么做。 我宁愿使用基于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.