Silverlight ItemContainerGenerator Статус? - PullRequest
0 голосов
/ 30 июля 2009

Эй, ребята, у меня проблемы с 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? (без таймеров!)

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 04 сентября 2009

Вместо того, чтобы делать всю магию в самом ListBox, я закончил тем, что создал собственную панель и использовал ее в качестве ItemPanel. В циклах Panel и Measure я размещаю ширину столбцов. В этих циклах все контейнеры уже созданы. Проблема решена.

Но все равно отстой, что Status отсутствует в ItemContainerGenerator.

...