2012-01-11 14 views
17

Ho il seguente codice per iscriversi alla proprietà evento modificato per VisiblePosition proprietà di Column classe:Ascoltate DependencyProperty evento modificato e ottenere il vecchio valore

DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(ColumnBase.VisiblePositionProperty, typeof(Column)); 

if (dpd != null) 
{ 
    dpd.AddValueChanged(col, ColumnVisiblePositionChangedHandler); 
} 

Ecco la definizione del metodo ColumnVisiblePositionChangedHandler:

static internal void ColumnVisiblePositionChangedHandler(object sender, EventArgs e) 

Il problema è che ho bisogno di ottenere il vecchio valore della proprietà. Come lo faccio?

Grazie,

risposta

15

Purtroppo, non si ottiene vecchie informazioni valore al momento della registrazione di proprietà del gestore di eventi modificata in questo modo.

Una soluzione è memorizzare il valore della proprietà da qualche parte (questo è il valore "vecchio") e quindi confrontarlo con il valore corrente nel gestore eventi.

Un'altra soluzione alternativa consiste nel creare la propria proprietà di dipendenza (DP) e creare l'associazione tra DP e DP del controllo. Questo ti darà notifica delle modifiche nello stile WPF.

Questo è un article about this.

+0

La soluzione alternativa # 2 è semplice e dannatamente elegante! Votato! – MarqueIV

5

È possibile farlo quando si registra il tuo proprietà di dipendenza nel gestore di evento associato. Di seguito riportiamo la sintassi per una proprietà di dipendenza e come ottenere il vecchio valore sul gestore PropertyChanged eventi:

//Declaration of property 
public static readonly DependencyProperty MyNameProperty = 
      DependencyProperty.Register("MyName", typeof(PropertyType), 
             typeof(ClassName), 
             new PropertyMetadata(null, 
                  new PropertyChangedCallback(MyNameValueChanged))); 

//PropertyChanged event handler to get the old value 
private static void MyNameValueChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs) 
{ 
    object oldValue = eventArgs.OldValue; //Get the old value 
} 
+10

-1 L'OP chiedeva di allegare a una proprietà scritta da qualcun altro, non come creare una nuova proprietà. –

+1

Anche se è vero che la risposta selezionata è la scelta giusta per quella situazione, è altrettanto vero che la risposta di VS1 era esattamente ciò di cui avevo bisogno per la mia situazione. Non ascolterò la sua risposta, ma ho voluto riconoscere che la sua risposta ha aiutato qualcuno a risolvere un problema nel mondo reale. – CobaltBlue

Problemi correlati