使用TreeView对所选项目更改的首选方法是什么?
-
29-09-2019 - |
题
选择TreeViewItem时更新其他控件的首选方法是什么?
目前,我的树视图中有以下结构
DataStoreType - (DataStoreTypeViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreType - (DataStoreTypeViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
它使用MVVM模式,两个TreeView项目类型中的每一个都由特定的视图模型填充( DataStoreTypeViewModel
和 DataStoreEntryViewModel
).
当用户选择一个节点时(要么 DataStoreType
或a DataStoreEntry
)我需要能够根据选择的信息填充列表控件。因此,列表控件需要能够显示两组不同的数据集。
我读过一些 RoutedEvents
, ,但不确定这是否是要走的路...
谢谢
基隆
解决方案
如果您采取的方法 这里 然后,您可以在所选项目的视图模型上设置属性。取决于 DataStoreType
和 DataStoreEntry
您可以在存储基类或接口的视图模型上使用相同的属性。
在属性中,您可以通过设置列表控件绑定到...的集合来做出反应。
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
.
只是调整它以适应您的需求。
不隶属于 StackOverflow