如何在MVVM Light WPF C#中的TreeViewItem选择上动态更改UserControl(不在视图中硬编码TreeView Selection事件)

时间:2014-01-08 06:40:11

标签: c# wpf xaml mvvm treeview

我正在使用MVVM Light,我有一个简单的问题。我想在TreeViewItem选择上动态更改UserControl(由MainWindow上的Content Control托管)。


完成工作

我在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");
      }
   }
}       

我还在相应ViewModel的Windows.Resource中创建了一个DataTemplate来更改选择中的UserControl

<DataTemplate DataType="{x:Type ViewModel1}" >
            <Tu:View1/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type ViewModel2}" >
            <Tu:View2 />
        </DataTemplate>

现在唯一关心的是我应该如何在树视图中数据化CurrentViewModel属性,以便内容控件中的Usercontrol更改???


修改

Windows.resource中的HDT

<DataTemplate DataType="{x:Type ViewModel1}" >
            <Tu:View1/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type ViewModel2}" >
            <Tu:View2 />
        </DataTemplate>

 <HierarchicalDataTemplate ItemsSource="{Binding list}" DataType="{x:Type th:Tu}">
        <StackPanel Orientation="Horizontal">
            <Label Content="{Binding list}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

树视图绑定到名称列表。这个名称对应于UserControl,我想要的是在树视图中选择那些名称时应该选择相应的用户控件。

1 个答案:

答案 0 :(得分:0)

如果您有数据绑定TreeView,则可以将ContentControl.Content绑定到其SelectedItem

<ContentControl Content="{Binding SelectedItem, ElementName=myTreeView}"/>

因此,您甚至不需要CurrentViewModel属性。