Каков предпочтительный метод реагирования на выбранное изменение элемента с помощью дерева?

StackOverflow https://stackoverflow.com/questions/4123461

Вопрос

Каков предпочельный метод обновления других элементов управления при выборе 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top