今天我根据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
根据我的学习in WPF,我不必在CheckBox的IsChecked属性上明确设置Mode=TwoWay
,因为默认情况下它是TwoWay
。
通常,用户可编辑的控件属性(例如文本框和复选框的属性)默认为双向绑定,而大多数其他属性默认为单向绑定。
我一直在想ToggleSwitch
只是另一个具有更好触控功能的CheckBox,它只适用于Windows应用商店和Windows Phone应用。
为什么ToggleSwitch.IsOn
不是默认的TwoWay绑定? CheckBox和ToggleSwitch之间是否还有其他差异?
答案 0 :(得分:3)
问题是微软在创建WPF的“Windows 8”版本时改变了一堆东西。很多东西都改变了,包括绑定的默认模式:
默认值为OneWay:源更新目标,但更改为 目标值不会更新源。
(MSDN)
而在WPF中:
BindingMode值之一。默认值为Default,返回 目标依赖项属性的默认绑定模式值。 但是,默认值因每个依赖项属性而异。在 一般的,用户可编辑的控件属性,例如文本框的属性 和复选框,默认为双向绑定,而大多数其他 属性默认为单向绑定。
一种程序化的方式 确定依赖属性是单向绑定还是双向绑定 default是使用获取属性的属性元数据 GetMetadata然后检查的布尔值 BindsTwoWayByDefault属性。
(MSDN)
答案 1 :(得分:0)
根据我的经验,ToggleSwitch和CheckBox都用于在两种状态之间切换。当然,ToggleSwitch用于Windows应用商店和Windows Phone应用。 也许,ToggleSwich更像是一个简单的ToggleButton而不是CheckBox ......另一个区别是CheckBox可以被清除,但ToggleSwitch总是处于切换或未被切换状态。
无论如何,我建议在每种情况下明确设置绑定模式。