切换开关需要显式“模式=双向”
本文关键字:模式 双向 开关 | 更新日期: 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,而不是一个复选框。另一个区别是可以清除复选框,但切换开关始终处于切换或未切换状态。
无论如何,我建议在每种情况下都明确设置绑定模式。