0

マルチバインディングを使用して、クラス A 2 TreeViewItems のすべてのインスタンスをクラス B のリストとして生成する 3 レベルの TreeView があります。そして、すべての List に Items が含まれています。これは Class C と言えます。

リスト (クラス B) が折りたたまれている間、UI の各リストにクラス C のアイテムを追加できます。TreeViewItem(Class A) 全体が collapsed である間に、各 List(Class B) に Class C を追加することもできます。

私の問題は、たとえそれらが折りたたまれていても、すべての TreeViewItems にアクセスできるようにする必要があることです (たとえば、それらを選択するため)。

私はそうしようとしましたが、次の問題が発生しました:

1- 表示されないすべての TreeViewItems (クラス B および C) は、まだ TreeViewItems として作成されていません (どのように作成できますか?)

2-クラスBのTreeViewIiemを初めて展開すると、そのすべてのアイテム(クラスC)がTreeViewItemsとして表示されます(明らかに些細なことです)

3-特定のクラス A TreeViewItemで任意のクラス B (2 つしかありません) を展開した後に折りたたむと、TreeViewItem(クラス A) 全体が折りたたまれている場合でも、クラス C インスタンスをTreeViewItemsとして追加できるようになります。このクラス A TreeViewItem で)

4- 選択したクラス A を変更すると (つまり、選択したものとは異なるクラス A の祖先を持つ別の TreeViewItem をクリックした場合)、以前に選択したクラス A の表示されていないすべての TreeViewItem が失われます。新しく選択したクラス A でステップ 1 からやり直すことができます。

では、いつでもクラス C または B の TreeViewItem を選択するにはどうすればよいでしょうか。

ありがとうございました

4

1 に答える 1

0

1)ツリービューに表示するアイテムの数によっては、すべてのTreeViewItemを作成する必要はありません。観察しているのは仮想化と呼ばれます。これが本当に必要ない場合は、そうしないことを強くお勧め VirtualizingStackPanel.IsVirtualizing="False"します。TreeViewで使用できます。手を汚してもかまわないのなら、これも役立つかもしれません。

残念ながら、私はあなたの他の点を理解していません。まず、データの階層を作成する方法を教えてください。HierarchicalDataTemplate動的データを使用し、適切なバインディング(折りたたみなど)を使用すると、すべてが機能するようになると思います。その場合、どのUIコントロールが表示されているかは問題ではないため、データのみが関連している必要があります。

そしてあなたの最後のそして実際の質問のために。ItemsSourceとHierarchicalDataTemplateを使用すると、データを簡単にトラバースしてアイテムを見つけることができます。たとえば、折りたたんですべてのクラスCを表示できます。

ただし、問題の1つは、TreeViewコントロールの選択に少し問題があることです。それを解決する方法については、この記事を参照してください

于 2011-08-20T14:28:25.120 に答える