Для Toggleswitch требуется явное "Mode=Twoway"
Сегодня я обновляю приложение Магазина Windows в соответствии с изменением дизайна пользовательского интерфейса. Одним из изменений является замена CheckBox
с ToggleSwitch
,
Таким образом, код обновляется с
<CheckBox IsChecked="{Binding BooleanProperty}" ...
в
<ToggleSwitch IsOn="{Binding BooleanProperty"} ... //does not update data source
Тогда я замечаю, что переключение ToggleSwitch
не обновляет базовый BooleanProperty
Я должен добавить Mode=TwoWay
чтобы это работало.
<Toggleswitch IsOn="{Binding BooleanProperty, Mode=TwoWay"} ... //update data source
Из того, что я узнал в WPF, мне не нужно устанавливать Mode=TwoWay
явно в свойстве IsChecked CheckBox, потому что это TwoWay
по умолчанию.
Как правило, редактируемые пользователем свойства элемента управления, такие как свойства текстовых полей и флажков, по умолчанию имеют двустороннюю привязку, тогда как большинство других свойств по умолчанию используют одностороннюю привязку.
И я думал ToggleSwitch
это еще один CheckBox с улучшенной поддержкой сенсорных функций, который доступен только в приложениях Магазина Windows и Windows Phone.
Зачем ToggleSwitch.IsOn
не по умолчанию для двухсторонней привязки? Есть ли другие различия между CheckBox и ToggleSwitch?
2 ответа
Проблема в том, что Microsoft изменила кучу вещей, когда они создали версию WPF для Windows 8. Изменено много вещей, включая режим по умолчанию для привязок:
По умолчанию используется OneWay: источник обновляет цель, но изменения целевого значения не обновляют источник.
( MSDN)
Тогда как в WPF:
Одно из значений BindingMode. По умолчанию используется значение по умолчанию, которое возвращает значение режима привязки по умолчанию для свойства целевой зависимости. Однако значение по умолчанию варьируется для каждого свойства зависимости. Как правило, редактируемые пользователем свойства элемента управления, такие как свойства текстовых полей и флажков, по умолчанию имеют двустороннюю привязку, тогда как большинство других свойств по умолчанию используют одностороннюю привязку.
Программный способ определить, является ли свойство зависимости односторонним или двусторонним по умолчанию, состоит в том, чтобы получить метаданные свойства свойства с помощью GetMetadata, а затем проверить логическое значение свойства BindsTwoWayByDefault.
( MSDN)
Согласно моему опыту, ToggleSwitch и CheckBox используются для переключения между двумя состояниями. Конечно, ToggleSwitch используется в приложениях Магазина Windows и Windows Phone. Возможно, ToggleSwich больше похож на простую ToggleButton, чем на CheckBox... Другое отличие состоит в том, что CheckBox может быть очищен, но ToggleSwitch всегда включен или не включен.
Во всяком случае, я предлагаю установить режим привязки явно в каждом случае.