Вопрос

Эй, ребята, у меня проблемы с 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top