Quelle est la méthode préférée de réagir à un changement d'élément sélectionné à l'aide du TreeView?

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

Question

Quelle est la méthode préférée de mise à jour d'autres contrôles lorsqu'un TreeViewItem a été sélectionné?

À l'heure actuelle, j'ai la structure suivante dans mon TreeView

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

Il utilise le modèle MVVM, avec chacun des deux types d'éléments de TreeView peuplés par un particulier Vue-modèle (le DataStoreTypeViewModel et DataStoreEntryViewModel).

Lorsque l'utilisateur de l'un des noeuds (soit un DataStoreType ou DataStoreEntry) Je dois être en mesure de remplir un contrôle de liste avec des informations basées sur la sélection. Ainsi, la liste besoins de contrôle pour pouvoir afficher deux séries de données différentes.

J'ai lu un peu RoutedEvents, mais pas sûr que ce soit la voie à suivre ...

Merci
Kieron

Était-ce utile?

La solution

Si vous prenez l'approche ici puis vous pouvez définir une propriété sur le modèle de vue de l'élément sélectionné. En fonction de la relation entre DataStoreType et DataStoreEntry vous pouvez utiliser la même propriété sur le modèle de vue soit stocker la classe de base ou de l'interface.

Dans la propriété, vous pouvez réagir en mettant une collection que le contrôle de liste est liée à ...

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}" />

En raison de la RaisePropertyChanged("ListItems"); dans le setter pour l'élément sélectionné dans l'arborescence du ListBox (en supposant que vous utilisez quelque chose comme ça) mettra à jour avec les nouvelles données. Dans cette conception, je suis en train de récupérer la liste des articles de la DataStoreTypeViewModel soit ou DataStoreEntryViewModel qui est mieux encapsulation si les données varie en fonction du type de modèle de vue. Il suffit de les faire mettre en œuvre une interface comme IDataStore.

Il suffit de le tordre pour répondre à vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top