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

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

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

它使用MVVM模式,两个TreeView项目类型中的每一个都由特定的视图模型填充( DataStoreTypeViewModelDataStoreEntryViewModel).

当用户选择一个节点时(要么 DataStoreType 或a DataStoreEntry)我需要能够根据选择的信息填充列表控件。因此,列表控件需要能够显示两组不同的数据集。

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

谢谢
基隆

有帮助吗?

解决方案

如果您采取的方法 这里 然后,您可以在所选项目的视图模型上设置属性。取决于 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 (假设您正在使用类似的东西)将使用新数据进行更新。在此设计中,我正在检索来自 DataStoreTypeViewModel 或者 DataStoreEntryViewModel 如果数据根据视图模型类型而变化,则更好地封装。只是让他们实现一个界面 IDataStore.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top