我正在创建一个包含多个ListView
的WPF GridViewColumn
,并希望根据绑定将CheckBox
IsChecked
属性设置为true或false,以及是否该数据值为null或不为null。
我尝试使用下面的DataTrigger来完成此操作,但它似乎不起作用。它基本上保留了ListView
中所有未选中的内容。
<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>
根据绑定情况,我有办法在ListView
GridViewColumn
处理特定列吗?确实在这种情况下,我想为CheckBox
提供一些自定义内容,并将其设置为IsChecked。我对WPF很新,所以很容易。
答案 0 :(得分:0)
好的,这是我根据问题评论中的建议做的。我创建了一个存储原始对象的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>