2010-11-08 62 views
0

当TreeViewItem被选中时,更新其他控件的首选方法是什么?使用TreeView对所选项目进行更改的首选方法是什么?

目前,我有以下结构在我的TreeView

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

它使用MVVM模式,每一个用特定视图模型(在DataStoreTypeViewModelDataStoreEntryViewModel)填充两个TreeView项类型。

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

我读过一些关于RoutedEvents,但不知道这是要走的路...

感谢
基隆

回答

0

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

内,你可以通过设置你的列表控件绑定到一个集合反应的特性...

VM

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(假设您正在使用类似的东西)中的选定项目的setter将更新与新的数据。 在本设计中,我检索DataStoreTypeViewModelDataStoreEntryViewModel中的项目列表,如果数据因视图模型类型而异,则这些项目的封装效果会更好。只要让他们实现一个像IDataStore这样的界面。

只需调整它以适应您的需求。

相关问题