2010-10-01 10 views
5

Ho un'applicazione WPF in cui sto usando le proprietà di dipendenza nel codebehind che voglio impostare tramite dichiarazioni XAML.WPF: dichiarazioni di proprietà XAML non impostate tramite Setter?

ad es.

<l:SelectControl StateType="A" Text="Hello"/> 

Quindi in questo esempio ho un UserControl chiamato SelectControl, che ha una proprietà chiamata StateType che manipolare alcune altre proprietà nella sua setter.

Per illustrare il problema, ho inserito un'altra proprietà denominata Text nell'esempio, continua a leggere e spiegherò ulteriormente.

Codebehind stralcio ...

public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(SelectControl)); 

public String Text 
{ 
    get { return (String)GetValue(TextProperty); } 
    set { SetValue(TextProperty, value); } 
} 

public static readonly DependencyProperty StateTypeProperty = DependencyProperty.Register("StateType", typeof(String), typeof(SelectControl)); 

public String StateType 
{ 
    get { return (String)GetValue(StateTypeProperty) } 
    set 
    { 
     switch (value) 
     { 
     case "A": 
      AnotherPropertyBoolean = true; 
      break; 
     case "B": 
      AnotherPropertyBoolean = false; 
      break; 
     default: 
     // this is only an example... 
     } 
    } 
} 

Ora, se ho impostato un punto di interruzione il setter (sia per StateType o Text), si scopre che non è mai eseguito.

Tuttavia i valori dichiarati per Text, vale a dire "Ciao" appare in esso è dati associati TextBox, e, naturalmente, mi legano un altro controllo di testo per il valore StateType s' posso vedere anche questo.

Qualcuno sa cosa sta succedendo?

risposta

13

I "wrapper CLR" per le proprietà di dipendenza vengono richiamati solo quando vengono eseguiti tramite il codice. XAML dipende dal nome specificato nella chiamata DependencyProperty.Register (...). Quindi, invece di "estendere" la logica del setter per la tua proprietà di dipendenza come hai fatto sopra, basta mettere la tua logica personalizzata in una funzione PropertyChangedCallback.

+0

Bello :) grazie. – ocodo