Каков предпочтительный метод реагирования на изменение выбранного элемента с помощью TreeView? - PullRequest
0 голосов
/ 08 ноября 2010

Какой предпочтительный метод обновления других элементов управления, когда был выбран TreeViewItem?

В настоящее время у меня есть следующая структура в моем TreeView

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

Он использует шаблон MVVM, с каждымиз двух типов элементов дерева, заполненных определенной моделью представления (DataStoreTypeViewModel и DataStoreEntryViewModel).

Когда пользователь выбирает один из узлов (либо DataStoreType, либо DataStoreEntry)Мне нужно иметь возможность заполнять список управления информацией, основанной на выборе.Таким образом, элемент управления списком должен иметь возможность отображать два разных набора данных.

Я немного прочитал о RoutedEvents, но не уверен, что так оно и есть ...

СпасибоКирон

1 Ответ

0 голосов
/ 09 ноября 2010

Если вы выберете подход здесь , тогда вы можете установить свойство для модели вида выбранного элемента.В зависимости от отношения между 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.

Просто настройте его в соответствии с вашими потребностями.

...