Чтобы понять, почему ContainerFromItem
у меня не сработало, приведу немного предыстории. Обработчик событий, где мне понадобилась эта функциональность, выглядит так:
var item = new SomeListItem();
SomeList.Add(item);
ListViewItem = SomeList.ItemContainerGenerator.ContainerFromItem(item); // returns null
После Add()
ItemContainerGenerator
не сразу создает контейнер, потому что событие CollectionChanged
может быть обработано в потоке без UI. Вместо этого он запускает асинхронный вызов и ожидает, пока поток пользовательского интерфейса не выполнит обратный вызов и не выполнит фактическую генерацию элемента управления ListViewItem.
Чтобы получить уведомление, когда это происходит, ItemContainerGenerator
выставляет событие StatusChanged
, которое запускается после генерации всех контейнеров.
Теперь я должен прослушать это событие и решить, хочет ли элемент управления установить фокус или нет.