6

今天我根据 UI 设计更改更新了一个 Windows Store 应用程序。其中一项更改是将 a 替换CheckBoxToggleSwitch

所以代码是从

<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在 CheckBox 的 IsChecked 属性上显式设置,因为它是TwoWay默认设置。

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

我一直在想ToggleSwitch它只是另一个具有更好的触控支持的 CheckBox,它仅在 Windows Store 和 Windows Phone 应用程序中可用。

为什么ToggleSwitch.IsOn不默认为双向绑定?CheckBox 和 ToggleSwitch 之间还有其他区别吗?

4

2 回答 2

3

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

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

( MSDN )

而在 WPF 中:

BindingMode 值之一。默认为 Default,它返回目标依赖属性的默认绑定模式值。但是,每个依赖属性的默认值会有所不同。通常,用户可编辑的控件属性(例如文本框和复选框的属性)默认为双向绑定,而大多数其他属性默认为单向绑定。

确定依赖属性默认绑定单向还是双向的一种编程方法是使用 GetMetadata 获取属性的属性元数据,然后检查 BindsTwoWayByDefault 属性的布尔值。

( MSDN )

于 2014-12-15T18:02:18.867 回答
0

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

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

于 2014-12-13T12:31:17.587 回答