2009-04-27 15 views
7

Ho bisogno di aggiornare tutti i binding sul mio UserControl quando la sua visibilità cambia in Visibile. Praticamente tutti i miei attacchi sono legati alla proprietà DataContext del controllo utente in modo sto cercando di aggiornare la destinazione di quello che lega:Aggiorna tutti i binding in UserControl in una volta

BindingOperations.GetBindingExpressionBase(this, UserControl.DataContextProperty).UpdateTarget(); 

ma ho null come il risultato di GetBindingExpression(..) metodo e mi chiedo se sto usando questo sbagliato

Inoltre, esiste un altro buon modo per aggiornare tutti i binding sul controllo (che utilizzano DataContext come origine).

risposta

15

Beh, si potrebbe appena ri-assegnare il DataContext:

var dataContext = DataContext; 
DataContext = null; 
DataContext = dataContext; 

FYI, reimpostare la proprietà al suo valore (cioè DataContext = DataContext) non funzionerà.

+0

OMG, sei un genio! Perché, PERCHÉ non ho pensato a questo ?! Grazie, ha funzionato :) – Alexandra

+2

Esiste un modo più aggraziato di WPF per farlo? Non dovrebbe WPF supportare una sorta di meccanismo di aggiornamento del binding? – BrettRobi

+2

La cosa più delirante è che senza la seconda riga, l'aggiornamento non avviene. Sembra non importa quanto tu misuri la proprietà DataContext, non succede nulla a meno che non sia impostata su null. Grazie per la risposta utile. – EFraim

1

Si sta utilizzando il metodo BindingOperations.GetBindingExpressionBase sulla proprietà errata. Devi usarlo sulle proprietà che sono vincolanti alla proprietà DataContext, non alla proprietà DataContext stessa.

Problemi correlati