1

私のアプリケーションでは、オブジェクトがキャンバスにドロップされるとすぐにツリーに保存しました。今、オブジェクトを削除するメソッドを作成しようとしていますが、これは問題ありませんが、その特定のオブジェクトをツリーから削除する必要もあります。各オブジェクトには一意の ID があるため、この方法でツリーで見つけて、キャンバスから削除しながらツリーから削除できます。

ツリー内のノードを見つけるために、各ノード (item.Tag) に ID を格納する予定でしたが、次の 2 つの問題に直面しています。

  1. 別のクラスからノードの詳細にアクセスするにはどうすればよいですか? myTreeObj.Items.Tag が正しく機能しません。

  2. ツリー内でループすると、myTreeObj.Items.Count に表示されるアイテムよりも多くのアイテムが表示されます。

コメントをお待ちしております。

ありがとう。

4

1 に答える 1

0

WPF では、TreeView は実際には、データ構造のビューであると言われています。WinForms では、TreeView のノードを上下にクロールし、手動で追加または削除する必要がありました。WPF では、(TreeView がバインドされている) 実際のデータ階層から項目を追加または削除し、PropertyChanged または CollectionChanged 通知を使用して、TreeView 自体を自動的に更新するように指示するのが適切な方法です。

あなたがやろうとしていることは可能かもしれませんが、それはずっと困難な戦いになるでしょうし、物事は期待通りには機能しません. WPF は本当にデータバインディングを使用することを望んでおり、他のアプローチは頭痛の種になります。

この記事は、WPF TreeView の操作方法を理解し始めるのに役立つかもしれません: http://joshsmithonwpf.wordpress.com/2008/05/24/the-wpf-treeview-is-a-view-of-a-木/

編集: 著者の元の記事は実際にはもっと役に立ちます: http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode

于 2012-06-29T18:05:44.467 に答える