我正在使用MVVM Light,我有一个简单的问题。我想动态更改 TreeViewItem 选择上的用户控件(由主窗口上的内容控件托管)。
已完成的工作
我在 MainViewModel 中创建了一个属性,用于跟踪当前选定的 ViewModel。
private ViewModelBase currentviewmodel;
readonly static ViewModel1 VM1 = new ViewModel1();
readonly static ViewModel2 VM2 = new ViewModel2();
public ViewModelBase CurrentViewModel
{
get
{
return currentviewmodel;
}
set
{
if (currentviewmodel != value)
{
currentviewmodel = value;
RaisePropertyChanged("CurrentViewModel");
}
}
}
我还在相应视图模型的Windows.Resource中创建了一个数据模板,以更改选择时的用户控件
<DataTemplate DataType="{x:Type ViewModel1}" >
<Tu:View1/>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModel2}" >
<Tu:View2 />
</DataTemplate>
现在唯一的问题是我应该如何对树视图中的 CurrentViewModel 属性进行数据绑定,以便内容控件中的用户控件发生变化???
编辑
Windows.resource 中的 HDT
<HierarchicalDataTemplate ItemsSource="{Binding list}" DataType="{x:Type th:Tu}">
<StackPanel Orientation="Horizontal">
<Label Content="{Binding list}"/>
</StackPanel>
</HierarchicalDataTemplate>
<TreeView Name="Tree" Background="#FF808080" Margin="0" ItemsSource="{Binding Tubelist}" />
树视图绑定到名称列表。这些名称对应于用户控件,我想要的是,在树视图中选择该名称时,应选择相应的用户控件。
如果你有数据绑定TreeView
,你可以只ContentControl.Content
绑定到它的SelectedItem
:
<ContentControl Content="{Binding SelectedItem, ElementName=myTreeView}"/>
因此,您甚至不需要CurrentViewModel
财产。