2015-03-17 3 views
2

Я использовал много раз следующиеКогда CheckBox.IsChecked.HasValue станет ложным?

if (chkBox.IsChecked.HasValue && chkBox.IsChecked.Value) 

Но почему? Какова ситуация, когда chkBox.IsChecked.HasValue становится ложным?

Я проверил, создав checkbox и отладив его, чтобы увидеть HasValue.

Проверено на конструкторе, проверено после проверки и снятия флажка. Но HasValue всегда считалось истинным.

+1

Если это флажок с 3 состояниями, он может быть нулевым (.hasvalue = false). Тем не менее, вы должны указать, что он имеет 3-го уровня в разметке. –

ответ

7

chkBox.IsChecked является bool?, что означает, что он является нулевым логическим значением (его можно установить на null). Флажок может иметь три значения: true, false и null.

HasValue будет в том случае, когда IsChecked установлен в nullfalse.

Таким образом, вы можете привязать к свойству Checked и установить значение null, как в этом коде. HasValue будет false:

chkBox.IsChecked = null; 

Кроме того, обратитесь к документации по использованию Nullable<T>.

Nullable<T> - struct, и на самом деле это не может быть null. Это всего лишь трюк в C#. Вы видите, что это , но на самом деле это struct с HasValue, установленным на false.

+0

Да. Я попытался присвоить нулевое значение. Но при этом флажок показывает третье состояние. – Sayka

+0

@Sayka: Обновлен мой пост. См. Обновленную последнюю строку. –

1

Флажки могут быть ThreeState - значение может быть проверено, непроверено или неопределено. Если значение неопределенно, HasValue возвращает false.

<CheckBox IsThreeState="True" IsChecked="{x:Null}" /> 
+0

Да, я видел третье состояние при назначении нулевого – Sayka

Смежные вопросы