我的XAML文件中有以下代码,复选框非常简单。选中该复选框后,它将我的属性设置为true。但是,当我取消选中该复选框时,在使用convertBack函数中的断点进行调试时,我可以看到该值为null。我甚至试图设置IsThreeState = false,但仍然无法正常工作。谁知道为什么?
<Window.Resources>
<this:DebugValueConverter x:Key="debugConverter"/>
</Window.Resources>
<StackPanel>
<CheckBox Content="Testing" IsThreeState="False"
IsChecked="{Binding CheckBoxValue,
Converter={StaticResource debugConverter},
FallbackValue=false,TargetNullValue=false}"
/>
</StackPanel>
CheckBoxValue是我的视图模型中的bool属性。
转换器类是: 公共类DebugValueConverter:IValueConverter { #region IValueConverter会员
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
#endregion
}
答案 0 :(得分:7)
这只是因为TargetNullValue=false
上有Binding
。这意味着false
媒体资源中CheckBoxValue
的值将转换为null
,这是您的转换器所看到的。
答案 1 :(得分:0)
即使CheckBox不是三态,IsChecked也常常为null。要么绑一个布尔?并使用(foo == true)来避免null,或绑定到bool并使用从bool转换的转换器?通过将null视为false来实现bool。