切换开关需要显式“模式=双向”

本文关键字:模式 双向 开关 | 更新日期: 2023-09-27 18:33:52

今天,我根据UI设计更改更新了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 中学到的知识,我不必在 CheckBox 的 IsChecked 属性上显式设置Mode=TwoWay,因为它默认是TwoWay的。

通常,用户可编辑的控件属性(如文本框和复选框的属性(默认为双向绑定,而大多数其他属性默认为单向绑定。

我一直在想ToggleSwitch只是另一个具有更好触摸支持的复选框,它仅在Windows Store和Windows Phone应用程序上可用。

为什么ToggleSwitch.IsOn不是默认的双向绑定?复选框和切换开关之间还有其他区别吗?

切换开关需要显式“模式=双向”

问题是Microsoft在创建"Windows 8"版本的WPF时改变了一堆东西。很多东西都变了,包括绑定的默认模式:

默认值为 OneWay:源更新目标,但更改为 目标值不更新源。

(MSDN(

而在 WPF 中:

绑定模式值之一。默认值为默认值,返回 目标依赖项属性的默认绑定模式值。 但是,默认值因每个依赖项属性而异。在 用户可编辑的常规控件属性,例如文本框的属性 和复选框,默认为双向绑定,而大多数其他 属性默认为单向绑定。

以编程方式 确定依赖项属性是单向绑定还是双向绑定 默认值是使用 获取元数据,然后检查 BindsTwoWayByDefault 属性。

(MSDN(

根据我的经验,切换开关和复选框都用于在两种状态之间切换。当然,ToggleSwitch用于Windows Store和Windows Phone应用程序。也许,ToggleSwich更像是一个简单的ToggleButton,而不是一个复选框。另一个区别是可以清除复选框,但切换开关始终处于切换或未切换状态。

无论如何,我建议在每种情况下都明确设置绑定模式。