2016-08-11 6 views

答えて

0

はい、可能です。私は本質的に同じコントロールであるListViewと同様のことをしました。ここのトリックは、それを作ることですファースト。あなたが何千ものアイテムを持っているならば、それは30秒か何かを取るべきではありません。

これを実装する方法は、ジェネリックコントロールを作成するか、このオブジェクトタイプ専用のコントロールを作成するかによって異なります。その理由は、これを高速に実行するには、アイテムオブジェクトのどのプロパティがIsCheckedであるかを知る必要があるからです。私のコントロールでは、私はIsCheckedPathというDPをWPFの精神の中に作りました。コントロールは、各オブジェクトのIsCheckedPathプロパティを対応するチェックボックスに自動的にバインドします。

マスターチェックボックスを切り替えると、アイテムをループしてプロパティ値を設定する必要があります。 2つの選択肢があります:1)反射または2)IsCheckedPath DPの設定時に式ツリーをコンパイルします。

反射が遅すぎるので#2でした。

この特定のオブジェクトのみを気にして、コントロールを再利用するとは思わない場合は、両方をスキップしてプロパティを設定します。良いアイディアではありません、私は一般的なルートを行くだろう:)。

また、WPFコントロールの仮想化とチェックボックスがスクロールして表示されているアイテムに対しては「生きていない」ため、ビジュアルを介して「ショートカット」とループを繰り返すことはできませんビュー。

0

こんにちは、WPFへようこそ!この状況では、あなたが探しているのはMultiBindingのようです。マスターチェックボックスは個々のチェックボックスを変更することができ、その逆も可能です。バインディングは双方向でなければなりません。あなたはまた、コンバータを作成する必要があります

<Checkbox x:Name="MasterCheckBox"> 
<Checkbox.IsChecked> 
    <MultiBinding Converter="[Instance of your converter class]" Mode="TwoWay"> 
     <Binding Source="ConversationViewModel.ConversationValues" Convert="{StaticResource PersonFilterTypeToBoolConverter}" ConverterParameter="{x:Static shared:MethodType.Mobile}"/> 
     <Binding Source="ConversationViewModel.ConversationValues" Convert="{StaticResource PersonFilterTypeToBoolConverter}" ConverterParameter="{x:Static shared:MethodType.Skype}"/> 
     <Binding Source="ConversationViewModel.ConversationValues" Convert="{StaticResource PersonFilterTypeToBoolConverter}" ConverterParameter="{x:Static shared:MethodType.Landline}"/> 
    </MultiBinding> 
</Checkbox.IsChecked> 

:MultiBindingのは、このように、マスターチェックボックスに適用されます。上にリンクされている記事では、簡単なコンバータの作成方法について説明しています。あなたの場合、バインディングは双方向であるため、ConvertメソッドとConvertBackメソッドの両方を処理する必要があります。 ConvertBackメソッドは、ユーザーがマスターチェックボックスを変更したときに実行されるため、マルチバインディングの下にあるすべてのバインディングをtrueまたはfalseに設定する必要があります。 Convertメソッドは、個々のチェックボックスの1つが変更されたときに実行されます。その場合、WPFでは、すべての個々のボックスがチェックされている場合はマスターチェックボックスのIsCheckedをtrueに設定し、すべての個々のボックスがチェックされていない場合はfalseに設定し、それらが混在している場合はIsCheckedをnullにする必要があります。 IsCheckedはそのプロパティの型がboolなのでnullにできますか? (ヌルブルブール)、どのようにスリーステートのチェックボックスWPFで動作します。

+0

これは私の問題を解決しなかった、私はIValueConverterにそれを絞り込んだが、私はそこからそれを修正する方法がわからない、今IValueConverterを追加します。 –

関連する問題