0

我正在创建一个ListView具有多个GridViewColumns 的 WPF,并希望CheckBox IsChecked根据绑定以及该数据值是否为 null 将属性设置为 true 或 false。

我尝试使用下面的 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 很陌生,所以很容易。

4

1 回答 1

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>
于 2013-10-30T18:54:58.357 回答