Почему я получаю непоследовательные результаты связывания

StackOverflow https://stackoverflow.com/questions/1411265

Вопрос

У меня есть шаблон элемента управления с кнопкой переключения. Это свойство 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;
Это было полезно?

Решение

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

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

Другие советы

<Ол>
  • Вы должны использовать привязку TwoWay
  • Убедитесь, что объект, содержащий ваше свойство Paused, поддерживает INotifyPropertyChanged.
  • Убедитесь, что установщик для Paused вызывает событие PropertyChanged
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top