Проблема с прокруткой в ​​виртуализированном TreeViewC#

Место общения программистов C#
Ответить
Anonymous
 Проблема с прокруткой в ​​виртуализированном TreeView

Сообщение Anonymous »

Сегодня я решил наконец попробовать виртуализированный TreeView. Для этого необходима привязка. Поэтому я решил протестировать две вещи — HierarchicalDataTemplate на основе типов + виртуализацию.
Я создал базовый класс для некоторых данных. Создано 2 производных класса из базового класса. Сделано 2 HierarchicalDataTemplate (по 1 для каждого производного класса), чтобы получить различное форматирование узлов. И работающая популяция из 10 тыс. узлов 2 типов.

Классы:

Код: Выделить всё

public class ListItem_Generic
{
public string Name { get; protected set; }
public ListItem_Generic(string Name = "") { this.Name = Name; }
}

public class ListItem_Single : ListItem_Generic
{
public ListItem_Single(string Name = "") : base(Name) { }
}

public class ListItem_Multi : ListItem_Generic
{
public List[*] Items { get; protected set; }
public ListItem_Multi(string Name = "", List Items = null)
: base(Name)
{
if (Items == null)
this.Items = new List();
else
this.Items = new List(Items);
}
}
Генерация 10 тыс. узлов 1-го уровня с некоторыми дочерними узлами, привязка:[/b]

Код: Выделить всё

    public MainWindow()
{
InitializeComponent();

// Create a list of sample items and populate them
var lst = new List();

int MaxHeaders = 10000;
var rnd = new Random();
// Now generate 10 000 records. First select random amount of headers
int HeadersCount = rnd.Next(MaxHeaders);

for (int i = 0; i < HeadersCount; i++)
{
var Childrencount = rnd.Next(100);
var children = new List();
for (int j = 0; j < Childrencount; j++)
children.Add(new ListItem_Single("Child #"+j+" of parent #"+i));
lst.Add(new ListItem_Multi("Header #" + i + " (" + Childrencount + ")", children));
}
for (int i = 0; i < MaxHeaders - HeadersCount; i++)
lst.Add(new ListItem_Single("Line #" + i));

// Bind lstView to lst
lstView.ItemsSource = lst;
lstView.UpdateLayout();
}
XAML с шаблонами иерархических данных:[/b] Все работает отлично:
  • деревовидное представление виртуализируется (это легко заметно по объему памяти) + время загрузки)
  • Узлы, производные от типов, имеют правильный формат
Однако при прокрутке до скажем, заголовок № 1000 и его расширение - позиция прокрутки переместится в какое-то другое место, делая расширенный узел и его дочерние элементы НЕ видимыми.

Что я сделал не так? Есть ли способ это исправить?

Обновление:[/b] Удаление виртуализации также устраняет ошибку прокрутки.

Подробнее здесь: https://stackoverflow.com/questions/159 ... d-treeview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»