Domanda

Io sono la creazione di un controllo TreeView in fase di esecuzione. Ha diversi nodi (TreeViewItem), ognuno con un nome. Inizialmente è compressa. Un separato casella combinata visualizza i nomi di tutti i TreeViewItem. Devo evidenziare un TreeViewItem in base al nome scelto. Sto usando una funzione ricorsiva e ottiene il contenitore TreeViewItem in questo modo:

if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                continue;

TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();

ma è

  

parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted

per tutte le voci crollate. Come faccio a generare contenitori per manualmente (Senza di loro espansione)?

È stato utile?

Soluzione

Ogni volta che ci si trova a camminare albero visuale si dovrebbe pensare seriamente a costruire un modello di vista.

il modello di visualizzazione in grado di aumentare la funzionalità treeviews senza preoccuparsi delle tipi di problemi che si trovano ad affrontare.

Il modello di visualizzazione per l'applicazione avrebbe un paio di ulteriori proprietà

IsSelected

IsExpanded

IsHighlighted

così come il vostro

Data

allora si dovrebbe associare (utilizzando un ItemContainerStyle) l'IsSelected, IsHighlighted e IsExpanded al TreeViewItem, poi come si aveva una collezione di questi modelli vista si potrebbe fare la ricerca sul modello di vista e solo impostare la proprietà IsHighlighted. Il modello di vista sarebbe quindi rispondere ed a causa del legame con lo stile che avrebbe evidenziare il TreeViewItem se si voleva. Si potrebbe anche fare cose funky come espandere tutti i nodi di cui sopra. La visualizzazione ad albero dovrebbe rispondere a questo.

Il modello di vista quando combinato con una vista ad albero dà molta più flessibilità e si ferma quei albero strisciando esercizi visivi (che sono un hack, e la sensazione sporca)

buon articolo sul ViewModel e la TreeView .. .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top