У меня есть WPF TreeView, где у каждого TreeViewItem есть флажок.Моя реализация основана на примере, представленном в превосходной статье Джоша Смита: http://www.codeproject.com/KB/WPF/TreeViewWithCheckBoxes.aspx. Как и в этой статье, я использую следующее поведение: когда элемент отмечен или не отмечен, все его дочерние элементы должны быть проверены илиснят, соответственно.
Проблема, с которой я столкнулся, состоит в том, что мой TreeView может содержать десятки тысяч элементов.Итак, если все элементы изначально не отмечены, а я затем проверяю корневой элемент, может пройти 10-20 секунд, прежде чем все потомки будут обновлены.Это слишком медленно для моих пользователей, и мне интересно, есть ли способ ускорить обновление пользовательского интерфейса.Я вполне уверен, что здесь виноваты события PropertyChanged, поскольку, когда я их удаляю, проверка корневого элемента происходит практически мгновенно, хотя дочерние флажки не обновляются.Есть ли лучший способ обрабатывать обновление нескольких элементов интерфейса одновременно?Обратите внимание, что я пытался использовать переработку контейнеров, но это, похоже, не помогло.
Если вы хотите попробовать воспроизвести это самостоятельно, вы можете скачать проект в вышеупомянутой статье, а затем в FooViewModel.cs изменитьФункция CreateFoos () для использования этого кода:
var root = new FooViewModel("Weapons");
root.IsInitiallySelected = true;
for (int i = 0; i < 400; i++)
{
var table = new FooViewModel("Table " + i);
for (int j = 65; j < 91; j++)
{
var charItem = new FooViewModel(Convert.ToChar(j).ToString());
for (int k = 0; k < 3; k++)
{
var deepItem = new FooViewModel("Item " + k);
charItem.Children.Add(deepItem);
}
table.Children.Add(charItem);
}
root.Children.Add(table);
}
root.Initialize();
return new List<FooViewModel> { root };
Спасибо за любые идеи,
-Craig