1

動的に作成できるツリー構造を探索するためのコントロールを作成しています。このコントロールはエクスプローラー ウィンドウによく似ており、"CurrentItem" は開いているフォルダーで、一部の "ChildrenItems" はサブフォルダーまたはファイルです。

ChildrenItems を表示するには、ListBox を使用しています。子アイテムをクリックすると、新しい CurrentItem が子アイテムになるように設定し、ChildrenItems を更新します (ツリーを下っていきます)。

技術的には、ListBox の ItemsSource プロパティを頻繁に変更します。

「Go Up」、「Go Back」、「Root」などの標準コマンドもいくつかあります

「Go Up」コマンドに問題があり、リストボックスの ItemsSource プロパティを以前に設定した ItemsSource に変更すると、ListBox の SelectedItem が古い ItemsSource が使用されたときに選択された古い項目にリセットされることに気付きました.

たぶん、少し例がより明確になるでしょう:私がこのツリー構造を持っているとしましょう:

 - Root
   - Node 1
     - SubNode 1a
     - SubNode 1b
   - Node 2
   - Node 3

「CurrentItem」をルートとして設定して、この構造の調査を開始します。これは、ListBox ItemsSource が「Node1,Node2,Node3」に設定されていることを意味します。

次に、「Node1」をクリックします (これにより、SelectedItem が変更されます)。次に、私のコントロールは「CurrentItem」をこの新しい SelectedItem に設定し、ListBox ItemsSource を「SubNode1a、SubNode1b」に設定します。

その後、「Go Up」コマンドを使用すると、「CurrentItem」は「Root」にリセットされ、ListBox ItemsSource は「Node1、Node2、Node3」にリセットされますが、違いがあります。「Node1」が選択されています。

これは、再利用される CollectionViewSource を考えさせ、選択したアイテムを保持します。これは可能ですか?

あなたの洞察に感謝します。

4

1 に答える 1

1

Bea Stollnitzの興味深い記事を見つけました。彼女は次のように述べています。

CollectionViewSource は、別の興味深いシナリオも可能にします。特定の CollectionViewSource が異なる時点で異なるコレクションを指している場合、それらのコレクションをラップするために作成したすべてのビューが記憶されます。過去に設定済みのソースを再度設定すると、CVS はそれを認識し、元々作成していたビューを再利用します。この動作は、階層バインディングのシナリオで役立ちます。

それが私の求めていた答えかもしれません。私の次の質問は次のとおりです。この動作を無効にすることは可能ですか?

于 2012-05-01T15:14:20.877 に答える