Эй, ребята, у меня проблемы с 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, поэтому мы могли подождать, пока для него не будет установлено значение «Готово», и затем перебирать контейнеры.
Как я могу решить это в Silverlight? (без таймеров!)
Спасибо за вашу помощь!