【问题标题】:What's the preferred method of reacting to a selected item change using the TreeView?使用 TreeView 对选定项目更改做出反应的首选方法是什么?
【发布时间】:2010-11-08 11:39:23
【问题描述】:

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

目前我的 TreeView 中有以下结构

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

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

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

我读过一些关于 RoutedEvents 的文章,但不确定这是否是正确的选择......

谢谢
基隆

【问题讨论】:

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


    【解决方案1】:

    如果您采用here 的方法,那么您可以在所选项目的视图模型上设置一个属性。根据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}" />
    

    由于树视图中所选项目的 setter 中的 RaisePropertyChanged("ListItems"); ListBox(假设您正在使用类似的东西)将使用新数据进行更新。 在这个设计中,我从DataStoreTypeViewModelDataStoreEntryViewModel 中检索项目列表,如果数据因视图模型类型而异,这将是更好的封装。让他们实现一个像IDataStore 这样的接口。

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

    【讨论】:

      猜你喜欢
      • 2014-01-10
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 2011-12-12
      • 2014-07-20
      相关资源
      最近更新 更多