Я создал базовый класс для некоторых данных. Создано 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);
}
}
Код: Выделить всё
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();
}
Код: Выделить всё
- деревовидное представление виртуализируется (это легко заметно по объему памяти) + время загрузки)
- Узлы, производные от типов, имеют правильный формат
Что я сделал не так? Есть ли способ это исправить?
Обновление:[/b] Удаление виртуализации также устраняет ошибку прокрутки.
Подробнее здесь: https://stackoverflow.com/questions/159 ... d-treeview
Мобильная версия