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之间是否还有其他差异?
问题是 Microsoft 在创建“Windows 8”版本的 WPF 时更改了很多内容。很多东西都改变了,包括绑定的默认模式:
默认为 OneWay:源更新目标,但对目标值的更改不会更新源。
(MSDN)
而在 WPF 中:
BindingMode 值之一。默认值为Default,它返回目标依赖属性的默认绑定模式值。但是,每个依赖项属性的默认值各不相同。通常,用户可编辑的控件属性(例如文本框和复选框的属性)默认为双向绑定,而大多数其他属性默认为单向绑定。
确定依赖项属性默认绑定单向还是双向的一种编程方法是使用 GetMetadata 获取该属性的属性元数据,然后检查 BindsTwoWayByDefault 属性的布尔值。
(MSDN)