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的WPFListView
,并希望根据绑定以及数据值是否为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绑定到此属性返回的值。