2011-08-05 20 views
0

属性Nameと2つのリストを持つタイプビューのオブジェクトにバインドするTreeViewがあります。 拡張されたリストの1つに要素を追加すると、拡張されたままで、必要なものがそのまま残ります。 問題は私がView1の名前を変更すると、すべてのMultibinging Bindingsがリフレッシュされ、View1内のいずれかが折りたたまれてもView1が展開されていれば拡張リストがすべて展開されます。 名前の値が変更されたときに、コンバータが何らかの形で変更された値のみを変更し、他のバインディングを壊さないように、この動作を回避する方法はありますか。 あなたのセットアップはCompositeCollectionが役立つ可能性のある何かのように見えますTreeViewのMultiBindingは、バインディング値の1つが変更されたときにTreeViewItemsを折りたたみます。

<HierarchicalDataTemplate DataType="{x:Type local:View}"> 
    <HierarchicalDataTemplate.ItemsSource> 
     <MultiBinding Converter="{StaticResource folderConverter}" ConverterParameter=",A,B"> 
      <Binding Path="Name"/> 
      <Binding Path="List1"/> 
      <Binding Path="List2"/> 
     </MultiBinding> 
    </HierarchicalDataTemplate.ItemsSource>` 
+0

私は不思議ですが、なぜあなたはItemsSourceのようなものにバインドするために "Name"プロパティが必要ですか?バインドできませんか? –

+0

私は他のリストと一緒に最初のtreeviewitemとしてツリービューにバインドされる名前をします。私はMultiBindingがそのような複数のバインディングに最適なソリューションだと思いました。または、私は何かが不足しています –

答えて

0

ありがとう、それはあなたが一部を変更した場合でもItemsSourceの完全なレクリエーションを防ぐ必要があります。

+0

私はコンポジットを返すようにコンバーターを修正しましたが、何も変更されませんでした!名前を変更すると、コンバータが再び呼び出され、新しい合成コレクションが生成されます。私は、List1とList2を1つのリストにまとめていないことに言及する必要があります。私は3レベルのツリービューを持っています。第2レベルには3つのTreeViewItem(名前とAとB)があり、あなたが展開するとList1が見えます。 –

+0

@MohamedCheri:あなたはコンバーターでマルチバインディングを使うべきではありません。コンポジットをCompositeCollectionに置き換えてください。 1つのコンバーターを使用して複雑なリストを作成する必要がある場合は、コレクションコンテナ内でコンバーターを使用することはできません –

関連する問題