ValueConverter для свойства IsChecked кнопки переключения WPF - PullRequest
3 голосов
/ 10 августа 2011

Я пытаюсь написать конвертер значений, который будет использоваться для привязки логического свойства IsChecked WPF ToggleButton к не булевому значению (которое оказывается двойным) в моей модели.Написанная мной функция преобразования выглядит следующим образом:

        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.Это ожидается?Я написал другие конвертеры без проблем в прошлом.

Ответы [ 4 ]

4 голосов
/ 10 августа 2011

Да, поскольку ToggleButton (например, флажок) может находиться в трех состояниях: отмечен, не отмечен и ни один (флажок будет недоступен).

В библиотеке MSDN указано :

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

и для 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.

3 голосов
/ 10 августа 2011

Это как и ожидалось;IsChecked - это bool?, а не bool.Измените свою первую строку на это:

if (targetType != typeof(bool?))
2 голосов
/ 10 августа 2011

IsChecked является логическим значением, допускающим значение NULL.Таким образом, вместо Boolean, проверьте для bool?

2 голосов
/ 10 августа 2011

Да, IsChecked является логическим значением 'nullable' ... означает, что это может быть true, false или null. Здесь довольно редко встречается кнопка переключения с нулевым значением, но она чаще встречается в некоторых подклассах, таких как CheckBox.

...