0

データセットのサイズが原因で、仮想化を使用するWPFツリービューコントロールがあります。階層は、[顧客]->[アカウント]->[トランザクション]で、150人の顧客のデータセットの例があります。ほとんどの場合、アカウントとトランザクションは1つだけですが、4つには8000のトランザクションがあります。

トランザクションIDを入力し、ツリービューでその場所に移動するには、検索機能が必要です。現在、MVVMモデルを使用しているため、トランザクションの検索は簡単です。ノードViewModelが戻ってきたら、SelectThis()を呼び出すだけで、正常に機能します。ただし、問題は、選択したノードが表示可能領域に移動しないことです。

ViewModelオブジェクトを取得し、ViewModelを含むTreeViewItemが見つかるまでTreeViewをトラバースし、コンテナーを生成してから、TreeViewItemでBringIntoView()を呼び出す関数があります。

初めてトランザクションを検索するときは、正常に機能します。別のトランザクションIDの2回目は、フリーズします。最初に2番目のIDを検索しようとすると、正常に機能します。操作を2回試行すると、常に失敗します。

WPFが舞台裏で何をしているのかはよくわかりませんが、コードが多すぎるためにコードが蓄積されてクラッシュするコンテナを生成することで、コードが何かをしていると思います。デバッガーですべてを壊すと、各Transactionオブジェクトのバインドされた依存関係プロパティを常に取得しているように見えるので、表示可能領域に30しかないのに、なぜこれほど多くのプロパティを取得しようとしているのかわかりません。すべてを取得しようとしているようです。

Search for Transactionの呼び出しの間に、生成されたすべてのUIコンテナーとオブジェクトをTreeViewコントロールからクリアし、アンロードにリセットして、コンテナーの生成に関してすべての検索を最初から開始できるようにする方法はありますか?

ありがとう

4

1 に答える 1

0

以下に示すように、TreeView の Itemsource をコレクション ビューにバインドすることにより、ICollectionView を使用してツリービューで検索を実行できます。

 ICollectionView defaultView = CollectionViewSource.GetDefaultView(treeView.ItemsSource);
 defaultView.Filter += delegate(object item)
 {
    string searchString = searchTextBox.Text;
 }

詳細なヘルプへのリンク

もう1つの参照

于 2013-01-29T11:26:17.297 に答える