Silverlight ItemContainerGenerator Статус?
-
05-07-2019 - |
Вопрос
Эй, ребята, у меня проблемы с ItemContainerGenerator в Silverlight 3.
В своем производном Custom ListBox я добавляю этот обработчик:
ItemContainerGenerator.ItemsChanged += new ItemsChangedEventHandler(ItemContainerGenerator_ItemsChanged);
Каждый раз, когда меняются предметы, мне перезванивают. Пока все хорошо.
Теперь в ItemContainerGenerator_ItemsChanged я хочу делать разные вещи в зависимости от действия, подобного этому:
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
Debug.WriteLine("items added");
break;
case NotifyCollectionChangedAction.Remove:
Debug.WriteLine("items removed");
break;
case NotifyCollectionChangedAction.Replace:
Debug.WriteLine("items removed");
break;
case NotifyCollectionChangedAction.Reset:
Debug.WriteLine("items reset, itemscount:" + this.Items.Count);
CalcMaxColumnWidths();
break;
default:
break;
}
Все отлично работает до сих пор. В CalcMaxColumnWidths () я вызываю, когда действие сбрасывается, я делаю это:
foreach (ListBoxItem item in ItemsControlExtensions.GetContainers(this))
{ //some code here }
Вот проблема:
Контейнеры, которые я пытаюсь получить с помощью метода GetContainers (), возвращают значение NULL, даже если Item.Count является правильным значением (60).
В WPF был ItemContainerGenerator.Status, поэтому мы могли подождать, пока для него не будет установлено значение Done, и затем перебрать контейнеры.
Как я могу решить эту проблему в Silverlight? (без таймеров!)
Спасибо за вашу помощь!
Решение
Вместо того, чтобы делать всю магию в самом ListBox, я закончил тем, что создал собственную панель и использовал ее в качестве ItemPanel. В циклах Panel и Measure я размещаю ширину столбцов. В этих циклах все контейнеры уже созданы. Проблема решена.
Но все равно отстой, что Status отсутствует в ItemContainerGenerator.