Pregunta

Tengo una plantilla de control con un botón de alternar. Este ToggleButton tiene su propiedad IsChecked unida a una propiedad de dependencia. Si configuro la propiedad de dependencia explícitamente, el enlace funciona.

El problema es que después de interactúo con el botón de alternar en la interfaz de usuario, los enlaces no actualizan la propiedad IsChecked si configuro la propiedad de dependencia explícitamente.

Tengo un trabajo alrededor usando el enlace TwoWay que funciona bien. Mi pregunta es, ¿por qué se comporta de esta manera? ¿Me estoy perdiendo de algo? ¿Hay algún error en el mecanismo de enlace de Silverlight?

EDITAR PARA INCLUIR SNIPPET:

El enlace en el ControlTemplate es similar a (podría reemplazarse con TemplateBinding)

<ToggleButton x:Name="PlayPause" Grid.Column="0" 
              IsChecked="{Binding Paused, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
              HorizontalAlignment="Center"
              Width="50" Height="50"/>

La configuración explícita de la propiedad de dependencia es el estándar bastante bog:

myComponent.Paused = true;
¿Fue útil?

Solución

WPF elimina los enlaces de una vía cuando se modifica la propiedad de destino (IsChecked en este caso). Silverlight solía mantener el enlace cuando se modificó IsChecked. Si Pausa se estableció más tarde, este valor también sobrescribiría IsChecked.

Según usted, parece que Silverlight volvió al comportamiento de WPF. Oh bien. Personalmente, considero que modificar una propiedad enlazada es un error. Si las propiedades no están destinadas a estar sincronizadas, el comando puede ser una mejor solución.

Otros consejos

  1. Debes usar el enlace de TwoWay
  2. Asegúrese de que el objeto que contiene su propiedad Paused admita INotifyPropertyChanged.
  3. Asegúrese de que el configurador para Pausado active el evento PropertyChanged
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top