2009-05-05 9 views
13

Quando seleziono un elemento sulla mia vista ad albero, c'è un intervallo di tempo notevole dalla mia classe viewmodel che viene istanziata alla vista che si aggiorna e il nodo treeview che si illumina.Come rilevare il binding dei dati completato in WPF

Ho bisogno di mostrare un cursore di attesa durante questo periodo - Ho provato a racchiudere il codice che istanzia la mia classe viewmodel, ma il cursore è tornato a una freccia un paio di secondi prima che l'intera unione dati finisca e il il nodo diventa hi-lit. C'è qualche evento che mi dice quando l'associazione è finita, o quando il nodo è illuminato?

Questo non ha nulla a che fare con i nodi in espansione, semplicemente selezionando i nodi di livello superiore.

Grazie per qualsiasi aiuto.

risposta

8

L'evento Loaded sul controllo TreeView desiderato avverrà dopo che tutti i binding sono stati impostati. Penso che accada prima che tutto sia stato disegnato, quindi potrebbe non essere esattamente quello di cui hai bisogno.

+1

assolutamente d'accordo, vedere http://blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx – Artru

1

C'è un "blocco" quando si verifica questo intervallo? Forse hai bisogno di mettere la logica pesante su un thread separato o semplicemente utilizzare la proprietà IsAsync della classe Binding. Si potrebbe anche voler dare un'occhiata a Priority Binding. Here è un buon articolo su come usarlo.

0

È possibile eseguire l'override del controllo di OnContentRendered per finestra.

7

È possibile ricevere una notifica quando la destinazione o quando la fonte viene aggiornata.

<TreeViewItem> 
    <TextBlock Name="NameText" 
     Text="{Binding Path=Name, Mode=OneWay, NotifyOnTargetUpdated=True}" 
     TargetUpdated="OnTargetUpdated"/> 
</TreeViewItem>