検索対象の項目までスクロールダウンする ListBox に検索機能を追加しようとしています。
RecipeNameDTO オブジェクトの束で満たされた ObservableCollection にバインドされた ListBox があります。簡単な検索で、Items コレクション内のオブジェクトを簡単に見つけることができます。
string searchItem = tbSearchString.Text;
var recipenameitem = lbRecipeNames.Items.Cast<DTO.RecipeNameDTO>().Where(u => u.RecipeName.ToLower().Contains(searchItem.ToLower())).FirstOrDefault();
この方法でアイテムを再現可能に見つけることができます。
ただし、ContainerFromItem を使用してオブジェクトのコンテナーを見つけようとすると、メソッドを実行したときにオブジェクトが ListBox に表示されていない限り、メソッドは null を返します。
ListBoxItem lbi = (ListBoxItem)lbRecipeNames.ItemContainerGenerator.ContainerFromItem(recipenameitem);
ContainerFromItem を実行する前に、実際のオブジェクトが ItemsCollection に存在することは確かです (私はそう思います)。これは、この投稿の冒頭で文書化した検索からの null 以外の結果を使用するためです。また、ListBox を下にスクロールして、探しているオブジェクトを見つけることもできます。
ContainerFromItem がコンテナーを返すのを妨げているのは、ListBox が ItemsCollection 内のオブジェクトをキャッシュする方法にあるものでなければなりません。コードの修正 (または問題の理解) はありますか?
マイケル