Несколько списков внутри одного ListView
Предварительная информация: у меня есть страница в приложении с такой настройкой:
<ScrollViewer>
<ListView>
//Some Grids and simple layout
</ListView>
<ListView>
//Huge nested ListView containing another ListView
<ListView>
//Further nesting with grids and layout
</ListView>
</ListView>
<ListView>
//Some Grids
</ListView>
</ScrollViewer>
Я использую MVVM, и объект, который я использую для привязки, в большинстве своем выглядит примерно так:
public class Activity
{
public string Description { get; set; }
public IList<NotImportantClass> NotImportantClass{ get; set; }
public string Comment { get; set; }
}
public class BaseClass
{
public string Title { get; set; }
public IList<Activity> Activities { get; set; }
}
public ObservableCollection<BaseClass> BindingSource
Я разрабатываю приложение для UWP, и производительность с вложенными ListView ужасна. После отладки с помощью элементов с сервера размещается более 4000 элементов. Я читал кое-что о сгруппированном ListView for WPF, но большая часть лекции и статей, которые я видел, просто подходит к нему с одним List и использует ключ, основанный на этом.
Свойство Title можно использовать в качестве ключа, мне просто нужен какой-то умный способ использовать linq или что-то другое для использования Grouped ListView. Любые предложения о том, как я могу подойти к этому?
1 ответ
Как правило, когда вы ставите любой ItemsControl
как твой ListView
внутри ScrollViewer
- уничтожает виртуализацию списка управления. Возможно, что просто заменив три ListViews
в ScrollViewer
с одним ListView
с ItemTemplateSelector
привязка к одному объединенному списку элементов разных типов, обрабатываемых селектором, восстановит виртуализацию и заставит все работать гладко. В целом - вложение прокручиваемых элементов управления списком плохо для пользователей и плохо влияет на производительность. Вложив их в ScrollViewer
должен требовать YesIKnowWhatImDoingAndIStillWantToDoIt
Флаг должен быть установлен до того, как это разрешено, так как это почти никогда не является хорошей идеей.