WPF切换按钮的IsChecked属性的ValueConverter

时间:2011-08-10 13:37:15

标签: wpf data-binding ivalueconverter

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

        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;
        }

问题在于,当调用funcion时,targetType不是我所期望的 - 它是

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

而不是System.Boolean。这是预期的吗?我过去写过其他转换器并没有麻烦。

4 个答案:

答案 0 :(得分:4)

是的,因为ToggleButton(想到一个复选框)可以处于三种状态:Checked,Unchecked和Neither(复选框将显示为灰色)。

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 :(得分:3)

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

if (targetType != typeof(bool?))

答案 2 :(得分:2)

是的,IsChecked是一个'nullable'布尔值...意思是它可能是true,false或null。这里很少有一个带空值的切换按钮,但在某些子类如CheckBox上更常见。

答案 3 :(得分:2)

IsChecked是一个可以为空的布尔值。因此,请检查Boolean

,而不是bool?