0

ListView複数のを含む WPF を作成しており、バインディングに基づいてプロパティを true または false に設定し、そのデータ値が null か null でないかGridViewColumnを設定したいと考えています。CheckBox IsChecked

以下の 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>

バインディングに基づいて特定の列をListViewwithで処理する方法はありますか? 本当にこの状況では、IsChecked に設定するだけでなく、いくつかのカスタム コンテンツをGridViewColumn提供したいと考えています。CheckBox私は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 インポートを以下のように変更する必要がありました。Intellisense ではポップアップしませx:Sharedんが、まだ存在しています。これにより、コンバーターの各インスタンスが一意になり、元の値を保存できるようになります。

<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 に答える