Почему я получаю непоследовательные результаты связывания - PullRequest
2 голосов
/ 11 сентября 2009

У меня есть шаблон управления с кнопкой переключения. Это свойство ToggleButton имеет свойство IsChecked, однозначно связанное со свойством зависимости. Если я устанавливаю свойство зависимости явно, привязка работает.

Проблема в том, что после Я взаимодействую с кнопкой переключения в пользовательском интерфейсе, привязки не обновляют свойство IsChecked, если я устанавливаю свойство зависимости явно.

У меня есть работа с использованием привязки TwoWay, которая работает нормально. У меня вопрос, почему он так себя ведет? Я что-то пропустил? Есть ли ошибка в механизме связывания Silverlight?

ИЗМЕНИТЬ, ЧТОБЫ ВКЛЮЧИТЬ SNIPPET:

Привязка в ControlTemplate выглядит примерно так (можно заменить на TemplateBinding)

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

Явная установка свойства зависимости - довольно болотный стандарт:

myComponent.Paused = true;

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

WPF удаляет односторонние привязки при изменении целевого свойства (в данном случае IsChecked). Silverlight используется для сохранения привязки при изменении IsChecked. Если параметр Paused был установлен позже, это значение также перезапишет IsChecked.

По вашему мнению, Silverlight вернулся к поведению WPF. Ну что ж. Лично я считаю изменение связанного свойства ошибкой. Если свойства не предназначены для синхронизации, может быть лучшим решением.

1 голос
/ 13 сентября 2009
  1. Вы должны использовать привязку TwoWay
  2. Убедитесь, что объект, содержащий ваше свойство Paused, поддерживает INotifyPropertyChanged.
  3. Убедитесь, что установщик для Paused вызывает событие PropertyChanged
...