【问题标题】:ValueConverter for IsChecked property of WPF Toggle ButtonWPF 切换按钮的 IsChecked 属性的 ValueConverter
【发布时间】:2011-08-10 13:37:14
【问题描述】:

我正在尝试编写一个值转换器,用于将 WPF ToggleButton 的 Boolean IsChecked 属性绑定到我的模型中的非布尔值(恰好是双精度值)。我写的转换函数是这样的:

        public object Convert(object value, Type targetType, object paramter, System.Globalization.CultureInfo culutre)
        {
          if (targetType != typeof(Boolean))
            throw new InvalidOperationException("Target type should be Boolean");

          var input = double.Parse(value.ToString());

          return (input==0.0) ? false: true;
        }

问题是当函数被调用时,targetType 不是我所期望的——它是

            "System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"

而不是 System.Boolean。这是预期的吗?过去我曾轻松编写过其他转换器。

【问题讨论】:

    标签: wpf data-binding ivalueconverter


    【解决方案1】:

    是的,因为 ToggleButton(想想复选框)​​可以处于三种状态:选中、未选中和两者都不是(复选框将灰显)。

    MSDN library states

    ToggleButton Class
    Base class for controls that can switch states, such as CheckBox.
    

    for IsChecked:

    Property Value
    Type: System.Nullable<Boolean>
    true if the ToggleButton is checked; false if the ToggleButton is unchecked; otherwise null. The default is false.
    

    因此,如果您转换为 bool? 或 Nullable,您可以轻松地使用 .HasValue.Value 获取值。

    【讨论】:

    • +1 用于提及 .HasValue。当我第一次开始使用可空类型时,我在访问 Value 而不检查 HasValue 时遇到了麻烦。 @_@
    【解决方案2】:

    这和预期的一样; IsCheckedbool?,而不是 bool。将您的第一行更改为:

    if (targetType != typeof(bool?))
    

    【讨论】:

      【解决方案3】:

      IsChecked 是一个可为空的布尔值。所以不是Boolean,而是检查bool?

      【讨论】:

        【解决方案4】:

        是的,IsChecked 是一个“可空”布尔值...意味着它可以是真、假或空。这里很少有带有 null 值的切换按钮,但在 CheckBox 等某些子类中更常见。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-11
          • 1970-01-01
          • 1970-01-01
          • 2012-08-21
          • 2011-12-15
          • 2016-11-14
          • 2014-09-12
          • 2016-01-13
          相关资源
          最近更新 更多