明确" Mode = Twoway"是Toggleswitch需要的

时间:2014-12-09 15:41:00

标签: c# wpf data-binding windows-store-apps toggleswitch

今天我根据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之间是否还有其他差异?

2 个答案:

答案 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总是处于切换或未被切换状态。

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

相关问题