ItemsControl в WPF генерирует все элементы, даже если виртуализация включена - PullRequest
0 голосов
/ 11 июля 2011

У меня есть класс, который наследуется от ItemsControl, а также VirtualizedPanel, который наследуется от панели VirtualizedStack. Я создал шаблоны так, чтобы мои элементы управления содержали Itemspresenter внутри ScrollViewer и включали все свойства витализации, а также CanContentScroll. *

Проблема в том, что я использую DataVirtualization в бэкэнде, поэтому у меня нет всей коллекции в памяти и в WPF, когда загружается ItemsControl, он вызывает GetEnumerator (), поэтому он пытается обойти всю коллекцию , В Silverlight этого не происходит, ItemsControl просто вызывает видимые элементы, используя индексатор моей коллекции, который реализует IList.

Есть ли способ заставить ItemsControl в WPF просто использовать индексатор вместо попытки загрузить всю коллекцию через IEnumerable?

Ответы [ 2 ]

1 голос
/ 11 декабря 2013

У меня была такая же проблема, когда я пытался реализовать пользовательскую коллекцию для моего элемента управления, унаследованную от ItemsControl.В моей коллекции реализован только IList, и когда я поместил его в ItemsSource, был вызван только метод GetEnumerator, кроме индексатора.Когда я добавил наследование от IList, он начинает вызывать индексатор.

Пример использования:

class MyClass : IList<T>, IList
{
  ...
        object IList.this[int index]
        {
            get { return this[index]; }
            set { throw new NotSupportedException(); }
        }

        public int this[int index]
        {
            get { return items[i]; }
            set { throw new NotSupportedException(); }
        }

        public IEnumerator<T> GetEnumerator()
        {
            for (int i = 0; i < count; i++)
            {
                yield return items[i];
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
  ...
}
1 голос
/ 11 июля 2011

Виртуализация применяется только к ListBox и ListView по умолчанию в WPF .... попробуйте использовать один из этих элементов управления ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...