C# 当值为null或不为null时,如何在listview中选中复选框?

C# 当值为null或不为null时,如何在listview中选中复选框?,c#,wpf,listview,wpf-controls,C#,Wpf,Listview,Wpf Controls,我正在创建一个包含多个GridViewColumns的WPFListView,并希望根据绑定以及数据值是否为null,将复选框设置为true或false 我尝试使用下面的DataTrigger来实现这一点,但它似乎不起作用。它基本上使列表视图中的所有内容都处于未选中状态 <GridViewColumn Header="W()" Width="20" > <GridViewColumn.CellTemplate> <DataTemplate&g

我正在创建一个包含多个
GridViewColumn
s的WPF
ListView
,并希望根据绑定以及数据值是否为null,将
复选框设置为true或false

我尝试使用下面的DataTrigger来实现这一点,但它似乎不起作用。它基本上使
列表视图中的所有内容都处于未选中状态

<GridViewColumn Header="W()" Width="20" >
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <CheckBox Content="Tell me something" >
                <CheckBox.Style>
                    <Style TargetType="{x:Type CheckBox}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding WebsiteJob}" Value="{x:Null}">
                                <Setter Property="IsChecked" Value="False" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </CheckBox.Style>
            </CheckBox>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>


是否有一种方法可以让我使用
GridViewColumn
根据绑定来处理
ListView
中的特定列?实际上,在这种情况下,我想为
复选框提供一些自定义内容,并将其设置为IsChecked。我是WPF的新手,所以请放松

好的,下面是我根据问题评论中的建议所做的。我创建了一个存储原始对象的IValueConverter。这允许我对嵌套对象本身执行各种验证,然后在完成时将其设置回原位

public class CheckboxIsCheckedValueConverter : IValueConverter {

    public object OriginalValue;

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        if (value != null) {
            OriginalValue = value;
            return true;
        }
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        if ((bool)value == true) {
            return OriginalValue;
        } else {
            return null;
        }
    }
}
此外,我还必须将xaml导入更改为以下内容。即使
x:Shared
在Intellisense中没有弹出,它仍然存在。这确保转换器的每个实例都是唯一的,并允许我存储原始值

<l:CheckboxIsCheckedValueConverter x:Key="CheckboxIsCheckedValueConverter" x:Shared="False" />

修改的GridViewColumn

<GridViewColumn HeaderContainerStyle="{StaticResource SmokeStyleHeaders}" Header="W()" Width="30" >
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <CheckBox Foreground="White" Checked="CheckBox_Checked" IsChecked="{Binding WebsiteJob, Converter={StaticResource CheckboxIsCheckedValueConverter}}" Content="{Binding WebsiteJob, Converter={StaticResource WebsiteJobValueConverter}}" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>


使用转换器或数据触发器可能更容易。@mattburland或更容易在ViewModel级别处理此问题,并返回用户界面可以理解或直接显示的重要属性值。转换器是其中的一部分。但是ConvertBack方法存在问题。我需要以某种方式将原始对象的值存储在检查中。@HighCore我希望看到您使用ViewModel谈论的示例。我以前从未处理过这个问题。我可能遗漏了一些东西,但为什么不使用一个简单的getter属性,根据某些条件返回true或false呢?然后可以将IsChecked绑定到此属性返回的值。