1

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

树视图中的项目具有UserControl保存对相关视图的引用的属性。我的视图模型有一个 SelectedItem 属性,该属性指示当前选择了树视图中的哪个项目。

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

4

2 回答 2

2

我建议使用ContentControl而不是Grid.

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

在树视图的 XAML 中添加

SelectedItem="{Binding VMSelectedItem}"

在内容控件的 XAML 中

Content="{Binding VMSelectedItem.UserControl}"

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

于 2013-05-05T13:28:19.420 回答
0

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

例如,您的视图模型中有一个枚举,其值为人、汽车、树。在您的 DataTemplateSelector 中,您将在该枚举上有一个 if,它返回所需的 DataTemplate。

基本上,您将拥有所有内容,而不是每个 TreeViewItem 拥有所有内容。

于 2013-05-05T13:52:44.083 回答