Каков предпочтительный метод реагирования на выбранное изменение элемента с помощью дерева?
-
29-09-2019 - |
Вопрос
Каков предпочельный метод обновления других элементов управления при выборе TreeViewItem?
В настоящее время у меня есть следующая структура в моем деревье
DataStoreType - (DataStoreTypeViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreType - (DataStoreTypeViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
DataStoreEntry - (DataStoreEntryViewModel)
Он использует шаблон MVVM, причем каждый из двух типов предметов дерева заполняется определенной моделью представления ( DataStoreTypeViewModel
и DataStoreEntryViewModel
).
Когда пользователь выбирает один из узлов (либо DataStoreType
или DataStoreEntry
) Мне нужно иметь возможность заполнить контроль списка информацией на основе выбора. Таким образом, элемент управления списком должен иметь возможность отображать два разных набора данных.
Я немного прочитал о RoutedEvents
, но не уверен, что это путь ...
Спасибо
Кирон
Решение
Если вы используете подход, принятый здесь Затем вы можете установить свойство на модели просмотра выбранного элемента. В зависимости от отношений между DataStoreType
и DataStoreEntry
Вы можете использовать одно и то же свойство в модели View либо хранить базовый класс или интерфейс.
В рамках свойства вы можете отреагировать, установив коллекцию, что управление списком связано с ...
Виртуальная машина
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
.
Просто настройте его в соответствии с вашими потребностями.