Несколько списков внутри одного 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 Флаг должен быть установлен до того, как это разрешено, так как это почти никогда не является хорошей идеей.

Другие вопросы по тегам