Насколько я понимаю, каждый вызов .Append() запускает обновления макета пользовательского интерфейса, и это перегружает поток пользовательского интерфейса. Мне интересно, что можно сделать, я попробовал выгрузить вызовы .Append() в другой поток, и это предотвращает блокировку моего пользовательского интерфейса, но он по-прежнему довольно медленный, заполнение списка из 1000 строк занимает несколько секунд.
Еще одна вещь, которую я задавался: можно ли как-то отложить эти изменения макета, а затем разрешать их только при прокрутке списка вниз или что-то в этом роде, но я не знаю, возможно ли это как-то возможно.
Вот XAML:
Код: Выделить всё
Код: Выделить всё
IObservableVector m_list = single_threaded_observable_vector();
for (int i = 0; i < 1000; ++i) {
auto item = winrt::single_threaded_map();
item.Insert(L"Name", box_value(to_hstring(L"")));
item.Insert(L"Age", box_value(to_hstring(L"")));
item.Insert(L"Occupation", box_value(to_hstring(L"")));
item.Insert(L"Address", box_value(to_hstring(L"")));
item.Insert(L"Bank", box_value(to_hstring(L"")));
item.Insert(L"BankAccountNumber", box_value(to_hstring(L"")));
m_list.Append(item);
}
auto listView = p.FindName(L"MyListView").as();
listView.ItemsSource(m_list);
Подробнее здесь: https://stackoverflow.com/questions/797 ... i-listview
Мобильная версия