布尔值转换器

Converter to Bool

我有一个普通的 Checkbox,我想将 IsChecked 属性 设置为 Binding 资源。 资源是自己写的classmyClass,可以null也可以引用(表示不是null

如果分配的对象 myObject(在 myClass 中)是 null,则 Checkbox 应该 不检查
并检查,如果不是 null.

我的 xaml 文件中的 IsChecked="..." 属性 必须写什么?

您可以使用 DataTrigger 创建样式,设置 IsChecked 属性。

<CheckBox>
   <CheckBox.Style>
      <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}">
         <Setter Property="IsChecked" Value="True"/>
         <Style.Triggers>
            <DataTrigger Binding="{Binding MyObject}" Value="{x:Null}">
               <Setter Property="IsChecked" Value="False"/>
            </DataTrigger>
         </Style.Triggers>
      </Style>
   </CheckBox.Style>
</CheckBox>

另一种方法是创建一个可重用的值转换器。

public class NotNullToBooleanConverter : IValueConverter
{
   public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
   {
      return value != null;
   }

   public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
   {
      throw new InvalidOperationException();
   }
}

在任何资源字典中创建转换器的实例,例如申请资源。

<local:NotNullToBooleanConverter x:Key="NotNullToBooleanConverter"/>

这个转换器可以直接在绑定中使用。

<CheckBox IsChecked="{Binding MyObject, Converter={StaticResource NotNullToBooleanConverter}}"/>