Wpf 什么';使用TreeView对所选项目更改作出反应的首选方法是什么?

Wpf 什么';使用TreeView对所选项目更改作出反应的首选方法是什么?,wpf,data-binding,mvvm,treeview,routed-events,Wpf,Data Binding,Mvvm,Treeview,Routed Events,选择TreeViewItem后,更新其他控件的首选方法是什么 目前我的树视图中有以下结构 DataStoreType - (DataStoreTypeViewModel) DataStoreEntry - (DataStoreEntryViewModel) DataStoreEntry - (DataStoreEntryViewModel) DataStoreEntry - (DataStoreEntryViewModel) DataStoreType - (DataSt

选择TreeViewItem后,更新其他控件的首选方法是什么

目前我的树视图中有以下结构

DataStoreType - (DataStoreTypeViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
DataStoreType - (DataStoreTypeViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
它使用MVVM模式,两种treeview项类型中的每一种都由特定的视图模型填充(“代码”>“数据存储类型视图模型”和“代码”>“数据存储视图模型”)

当用户选择其中一个节点(一个
数据存储类型
或一个
数据存储条目
)时,我需要能够使用基于选择的信息填充列表控件。那么名单呢 控件需要能够显示两组不同的数据

我读过一些关于路由事件的书,但不确定这是不是正确的方法

谢谢

Kieron

如果采用所采取的方法,则可以在所选项目的视图模型上设置属性。根据
DataStoreType
DataStoreEntry
之间的关系,可以在视图模型上使用相同的属性来存储基类或接口

在属性中,您可以通过设置列表控件绑定到的集合作出反应

虚拟机

public-IDataStore-SelectedStore
{
获取{return\u store;}
设置
{
_存储=价值;
RaisePropertyChanged(“SelectedStore”);
RaisePropertyChanged(“列表项”);
}
}
公共IEnumerbale列表项
{
得到
{ 
如果(_store==null)
返回可枚举的.Empty();
其他的
退货_store.Items;
}
} 
XAML


由于
RaisePropertyChanged(“ListItems”)
在树视图中所选项目的setter中,
列表框(假设您正在使用类似的内容)将使用新数据更新。
在本设计中,我从
DataStoreTypeViewModel
datastoreryviewmodel
中检索项目列表,如果数据根据视图模型类型而变化,则更好地进行封装。只要让他们实现一个像
IDataStore
这样的接口就可以了

只要调整它来满足你的需要

public IDataStore SelectedStore
{
    get { return _store; }
    set 
    {
        _store = value;
        RaisePropertyChanged("SelectedStore");
        RaisePropertyChanged("ListItems");
    }
 }

 public IEnumerbale<string> ListItems
 {
     get 
     { 
          if(_store == null)
               return Enumerable.Empty<string>();
          else 
               return _store.Items; 
     }
 } 
<ListBox ItemsSource="{Binding ListItems}" />