【问题标题】:Explicit "Mode=Twoway" is required for ToggleswitchToggleswitch 需要显式“Mode=Twoway”
【发布时间】:2014-12-09 15:41:00
【问题描述】:

今天我根据 UI 设计更改更新了一个 Windows Store 应用程序。其中一项更改是将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 只是另一个具有更好的触控支持的复选框,它仅在 Windows 应用商店和 Windows Phone 应用中可用。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    (MSDN)

    而在 WPF 中:

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

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

    (MSDN)

    【讨论】:

    • ++,但我不确定这部分 - Its possible that some controls/properties override this behavior - MSDN 的措辞表明默认值始终是“OneWay”。
    • @McGarnagle 同意 我把它放在那里是因为 .NET 总是很奇怪并且只能做一次。虽然它并不真的需要在那里
    【解决方案2】:

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

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

    【讨论】:

    • 是的,我确实觉得 Mode=TwoWay更好 添加到代码中的,因为我不确定 WPF 链接中的旧规则是否适用于新的 Modern UI东西。
    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多