リアルタイムのフィルタリングと並べ替えを行うアプリを作成しました (テキスト ボックス内のテキストが変更されると、リストが動的に変更されます)。ObservableCollection にバインドされた ListBox を使用し、後で List にバインドしました。小さなデータでは問題なく動作しましたが、1000 個のアイテムを使用すると失敗しました。
並べ替えにはその場でQuickSortを使用し、フィルター処理されたアイテムには Visibility プロパティを使用しました。パフォーマンス上の理由から、それが最適だと思いました。
最初に、ObservableCollection を ListBox にバインドしてみました。テキストをすばやく入力すると、例外がスローされました(レイアウトサイクルが検出されました)。
リストをItemsSourceとして試したよりも。並べ替え/フィルタリングが完了した後、NotifyPropertyChanged("MyList") を起動しました。例外はありませんでしたが、ファイラー フレーズの結果、目に見える項目がわずかしかなかった場合です。読み込みが非常に遅かった。
本当にアマチュアに見えるので、好きではないことをしてしまいました。
Data.ApplyFiltersSorting();
ItemsListBox.ItemsSource = Data.MyItems.Where(a => a.Visibility == Visibility.Visible);
これは実際には高速に動作し、エラーは発生しません。
以前の試みで何が間違っていたのか、またこれを行う適切な方法は何か教えてもらえますか?