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

时间:2010-11-08 11:39:24

标签: wpf data-binding mvvm treeview routed-events

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

目前我在TreeView中有以下结构

DataStoreType - (DataStoreTypeViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
DataStoreType - (DataStoreTypeViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)
    DataStoreEntry - (DataStoreEntryViewModel)

它正在使用MVVM模式,两个树视图项类型中的每一个都由特定的视图模型填充(DataStoreTypeViewModelDataStoreEntryViewModel)。

当用户选择其中一个节点(DataStoreTypeDataStoreEntry)时,我需要能够根据选择信息填充列表控件。所以列表 控件需要能够显示两组不同的数据。

我已经阅读了一些关于RoutedEvents的内容,但不确定这是否可行......

感谢
基隆

1 个答案:

答案 0 :(得分:0)

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

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

VM

DataStoreEntry

XAML

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; 
     }
 } 

由于树视图中所选项目的setter中的<ListBox ItemsSource="{Binding ListItems}" /> RaisePropertyChanged("ListItems");(假设您正在使用类似的东西)将使用新数据进行更新。 在这个设计中,我正在从ListBoxDataStoreTypeViewModel中检索项目列表,如果数据根据视图模型类型而变化,则这是更好的封装。让他们实现像DataStoreEntryViewModel这样的界面。

只需调整它以满足您的需求。