2010-10-01 10 views
5

Tengo una aplicación WPF donde estoy usando propiedades de dependencia en codebehind que quiero configurar a través de declaraciones XAML.WPF: las declaraciones de propiedad XAML no se establecen a través de Setters?

p. Ej.

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

Así que en este ejemplo tengo un UserControl llamados SelectControl, que tiene una propiedad llamada StateType que manipulan algunas otras propiedades en su colocador.

Para ayudar a ilustrar el problema, he puesto otra propiedad llamada Text en el ejemplo, siga leyendo y le explicaré más.

Codebehind extracto ...

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... 
     } 
    } 
} 

Ahora, si me puse un punto de interrupción en la incubadora (ya sea para StateType o Text), resulta que nunca se ejecuta.

Sin embargo los valores declarados por Text, es decir "Hola" aparece en sus datos quedarán unidas TextBox, y por supuesto que me unen a otro control de texto StateType 's valor veo que también.

¿Alguien sabe lo que está pasando?

Respuesta

13

Los "CLR-wrappers" para las propiedades de dependencia solo se llaman cuando se realizan a través del código. XAML depende del nombre especificado en la llamada DependencyProperty.Register (...). Entonces, en lugar de "extender" la lógica del setter para su propiedad de dependencia como lo hizo anteriormente, simplemente ponga su lógica personalizada en una función PropertyChangedCallback.

+0

Agradable :) gracias. – ocodo

Cuestiones relacionadas