0

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

目前我的 TreeView 中有以下结构

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

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

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

我读过一些关于RoutedEvents,但不确定这是否是要走的路......

谢谢基隆
_

4

1 回答 1

0

如果您采用此处采用的方法,那么您可以在所选项目的视图模型上设置一个属性。根据 和 之间的关系DataStoreTypeDataStoreEntry您可以在存储基类或接口的视图模型上使用相同的属性。

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

虚拟机

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

XAML

<ListBox ItemsSource="{Binding ListItems}" />

由于RaisePropertyChanged("ListItems");在树视图中选定项目的设置器中ListBox(假设您正在使用类似的东西)将使用新数据进行更新。在这个设计中,如果数据根据视图模型类型而变化,我将从DataStoreTypeViewModel或更好的封装中检索项目列表。DataStoreEntryViewModel只需让他们实现一个接口,例如IDataStore.

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

于 2010-11-09T07:20:28.090 回答