Похоже на этот переплет
IsChecked="{Binding Path=IsSelected,
Mode=TwoWay,
RelativeSource={RelativeSource TemplatedParent}}"
отвечает за наблюдаемый результат, потому что CheckBox.IsChecked
может быть True
| False
| null
(Nullable<bool>
), когда ListBoxItem.IsSelected
равно bool
если я установлю подробную информацию о трассировке, используя PresentationTraceSources.TraceLevel=High
IsChecked="{Binding Path=IsSelected,
Mode=TwoWay,
PresentationTraceSources.TraceLevel=High,
RelativeSource={RelativeSource TemplatedParent}}"
Я получаю:
BindingExpression : GetValue at level 0 from ListBoxItem using DependencyProperty(IsSelected): 'False'
BindingExpression : TransferValue - got raw value 'False'
BindingExpression : TransferValue - using final value 'False'
BindingExpression : Update - got raw value 'True'
BindingExpression : Update - using final value 'True'
BindingExpression : SetValue at level 0 to ListBoxItem using DependencyProperty(IsSelected): 'True'
BindingExpression : GetValue at level 0 from ListBoxItem using DependencyProperty(IsSelected): 'True'
BindingExpression : TransferValue - got raw value 'True'
BindingExpression : TransferValue - using final value 'True'
BindingExpression : Update - got raw value <null>
BindingExpression : Update - using final value {DependencyProperty.UnsetValue}
null
приводит к {DependencyProperty.UnsetValue}, и это ошибка для свойства boSl IsSelected
Красная рамка вокруг элемента по умолчанию Validation.ErrorTemplate
. Вы можете отключить его на CheckBox
<CheckBox Validation.ErrorTemplate="{x:Null}" Focusable="False" ...
обратите внимание, что CheckBox в неопределенном состоянии (IsChecked = null) не очищает выбор ListBoxItem