У меня есть 2 классов:Получить элемент из пользовательского элемента управления/C# WPF
class MultiSwitch : ListBox
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is MultiSwitchItem;
}
protected override DependencyObject GetContainerForItemOverride()
{
return new MultiSwitchItem();
}
}
class MultiSwitchItem : ListBoxItem {...}
В принципе, я хочу, чтобы поместить элементы в зависимости от элементов сосчитать. Поэтому я подписался на событие с измененной коллекцией, и я пытаюсь получить MultiSwitchItem из коллекции Items. Я узнал, что коллекция Items не содержит MultiSwitchItems. Затем я нашел решение, которое выглядит так:
private void RearrangeItems(
object sender,
NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
{
foreach (var item in Items)
{
MultiSwitchItem item2 = ItemContainerGenerator.ContainerFromItem(item) as MultiSwitchItem;
...
}
}
Но item2 всегда равно нулю. Что я делаю не так?
EDIT Хорошо, у меня есть небольшой прогресс в этом. Эта проблема возникает только при инициализации элемента управления (поэтому, я думаю, обертки для элементов создаются не мгновенно). Итак, вопрос теперь: как заставить создание MultiSwitchItem
s, или как перебирать элементы ПОСЛЕ обертки?
данных Если вы хотите изменить детали, почему Дон» Вы используете CollectionView? Другое решение - написать собственную панель. Или, если вы настаиваете на этом, вы можете попробовать событие OnLoaded или события ItemContainerGenerator, чтобы позже начать перегруппировку. – dowhilefor
@ dowhilefor Я думаю, что это проще в реализации этой логики прямо в моем контейнере ... Во всяком случае, я подписался на событие Loaded, и он работает! Спасибо за помощь! –