3

xamlに[すべて選択]チェックボックスを実装したいと思います。
リストビューにいくつかの(テンプレート化された)チェックボックスがあります。次に、リストビューの外側にチェックボックスがあり、「すべて選択」動作が必要です。ViewModelで問題を簡単に解決できましたが、[すべて選択]チェックボックスはViewModelとは(直接)関係がないため、xamlでこれを行う方がエレガントだと思います。コードは次のようになります。

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
        <CheckBox Content="Globale Eingabe"
            Name="SelectSingle"
            IsChecked="{Binding IsChecked}">
        </CheckBox>
    </DataTemplate>
<ListView.ItemTemplate>  
</ListView>
<CheckBox Name="SelectAll" />

ご覧のとおり、SelectSingleのIsCheckedプロパティはすでにViewModelにバインドされています。したがって、チェックボックスの状態を操作するためのトリガーが必要だと思います。

今、私はすでにこのようなsthを試しました:

<CheckBox Content="Globale Eingabe"
    Name="SelectSingle"
    IsChecked="{Binding IsChecked}">
    <CheckBox.Triggers>
        <Trigger SourceName="SelectAll" Property="IsChecked" Value="True">
            <Setter TargetName="SelectSingle"  Property="IsChecked" Value="True"/>
        </Trigger>
    </CheckBox.Triggers>
</CheckBox>

またはこのようなsth:

<CheckBox Content="Globale Eingabe"
    Name="SelectSingle"
    IsChecked="{Binding IsChecked}">
    <CheckBox.Triggers>
        <DataTrigger Binding="{Binding ElementName=SelectAll, Path=IsChecked}" 
            Value="True">
            <Setter TargetName="Check"
                Property="IsChecked"
                Value="True"/>
        </DataTrigger>
    </CheckBox.Triggers>
</CheckBox>

私も同じことをスタイルの中で試しましたが、役に立ちませんでした。「静的メンバー「IsCheckedPropertyがタイプ「ContentPresenter」に見つかりませんでした」の行に沿って、常にエラーが発生します。

これで、Target / SourceNameバインディングが機能しないように聞こえますが、なぜですか?足りないものはありますか?

4

2 に答える 2

3

結局のところ、ViewModelにCheckAllロジックを配置する必要があると思います。このCodeProjectの記事では、WPF Guro Josh Smithが、ViewModelの同様の問題(彼の場合はそうでTreeViewはないListView)を次のタイトルで解決しています:「SmartsをViewModelに配置する」
このロジックをViewModelに実装してデバッグする方が、どこに食い込むかわからないような複雑な作業を行うよりも簡単だと思いMultiBindingます。
最後の注意-私は常にジョシュのアドバイスに従います:-)

于 2011-10-09T06:06:24.777 に答える
0

Torsten、あなたが何を試したか理解できなかった場合は申し訳ありませんが、次を使用して、IsChecked内部のCheckBoxListViewIsCheckedプロパティをCheckBox外部のプロパティにバインドする必要があります。

IsChecked="{Binding Path=IsChecked, Mode=OneWay,ElementName=OutsideCheckBox}"
于 2009-05-14T14:58:53.997 に答える