Toggleswitch需要明确的"Mode = Twoway"

ken*_*yzx 6 c# data-binding wpf windows-store-apps toggleswitch

今天我根据UI设计更改更新了Windows应用商店应用.其中一个变化是用a替换CheckBoxa ToggleSwitch.

所以代码是从更新

<CheckBox IsChecked="{Binding BooleanProperty}" ...
Run Code Online (Sandbox Code Playgroud)

<ToggleSwitch IsOn="{Binding BooleanProperty"} ... //does not update data source
Run Code Online (Sandbox Code Playgroud)

然后我注意到切换ToggleSwitch不会更新底层BooleanProperty,我必须添加Mode=TwoWay以使其工作.

<Toggleswitch IsOn="{Binding BooleanProperty, Mode=TwoWay"} ... //update data source
Run Code Online (Sandbox Code Playgroud)

根据我在WPF中学到的知识,我不必Mode=TwoWay在CheckBox的IsChecked属性上明确设置,因为它是TwoWay默认的.

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

我一直在想的ToggleSwitch是另一个具有更好触摸支持的CheckBox,它仅适用于Windows应用商店和Windows Phone应用.

为什么ToggleSwitch.IsOn不默认为TwoWay绑定?CheckBox和ToggleSwitch之间是否还有其他差异?

Bra*_*NET 3

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

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

MSDN

而在 WPF 中:

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

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

MSDN