Для 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 всегда включен или не включен.

Во всяком случае, я предлагаю установить режим привязки явно в каждом случае.

Другие вопросы по тегам