2009-11-25 21 views
5

Sembra che altri abbiano avuto variazioni su questa domanda, ma da quello che posso dire non è stato indirizzato a persone che utilizzano le raccolte in un unico modello di visualizzazione.MVVM selezionando programmaticamente una voce treeview

Ho una VM che contiene una ObservableCollection di oggetti, non una VM per ogni oggetto. Quindi non penso di poter usare il booster SelectedItem che è spesso discusso perché non penso di poter legare alla proprietà sugli oggetti della collezione ... solo le proprietà sulla VM.

Quindi ho scritto tutto bene senza code-behind e accoppiamento minimo, ma quando un nuovo elemento viene aggiunto alla raccolta, che è associato a treeView, devo selezionare quell'elemento.

Idee?

Grazie!

risposta

4

Quando si pensa a questo. Dovresti davvero costruire un wrapper per ogni elemento della vista ad albero che ha il bool IsSelected su di esso così come il bool IsExpanded che rendono la vita molto più facile per la visualizzazione dei dati. Potresti anche aggiungerli alla tua classe e usarli da lì.

+0

Forse sì. Comunque ho preso una via di mezzo. Sono andato avanti e ho implementato INotifyPropertyChanged su ciascuno dei tipi di oggetto che ObservableCollection della VM tiene e schiaffa IsSelected e IsExpanded su di essi. Il lato negativo è che i miei oggetti ora hanno dentro di sé quel pasticcio (è davvero male?). Il lato positivo è che non ho dovuto creare quel livello aggiuntivo di VM che non mi ha fornito nulla oltre un luogo in cui tenere l'oggetto sottostante e quelle due proprietà. – Bob

+0

Se è tutto ciò di cui hai bisogno, puoi anche farlo in quel modo. – Erin

4

Josh Smith ha un articolo su CodeProject in cui suggerisce di creare un oggetto ViewModel per rappresentare ciascun nodo di TreeView e quindi li scocca come necessario.

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

+0

sì questo è un buon articolo. Non evitami, ma penso che potrebbe essere eccessivo quando tutto ciò che devi veramente fare è collegare un paio di interazioni dell'interfaccia utente (espandere, selezionare). :) – Bob