Как задержать рисование элемента пользовательского интерфейса до загрузки остальной части страницы?

#windows-runtime #winrt-xaml #windows-phone-8.1

#windows-среда выполнения #winrt-xaml #windows-phone-8.1

Вопрос:

ListView увеличивает время запуска моего приложения. Сначала я ничего не вижу, а затем сразу отображается вся страница со всем ее содержимым. Как я могу заставить страницу отображаться без ListView (или неопределенного кольца выполнения на его месте) и только после этого начать рисовать ListView? Кроме того, приложение должно иметь возможность реагировать на нажатие обратной кнопки во время загрузки. Изменение ListView.Visibility на collapsed в XAML и на Visible в Page_Loaded не дает желаемого эффекта; Только если я оставлю ListView свернутым, я получу быструю загрузку страницы.

PS: Я думаю, что виртуализация здесь не проблема: поскольку 17 элементов списка видны в любое время; Список виртуализирован, но он загружает 52 элемента из общего числа 68 при запуске; Но опять же, список не такой длинный.

введите описание изображения здесь

Комментарии:

1. Я сомневаюсь, что рисование (рендеринг) вашего ListView происходит медленно. Более вероятно, что для этого загружается какое-то растровое изображение или другие данные ListView , которые замедляют работу. В любом случае — может быть трудно догадаться, в чем причина, не просматривая весь код или, по крайней мере, не зная, что вы пытаетесь отобразить в ListView . Вы можете попробовать поделиться еще некоторыми из них или просто запустить свое приложение через профилировщик, чтобы увидеть, на что тратится время, особенно в потоке пользовательского интерфейса / диспетчера.

2. @Filip В моем списке нет изображений, только текст.

3. Ну, с 2 секундами, потраченными на 53 ListViewItems — там должно быть что-то не так. Я бы углубился в эту ветку в профилировщике. Может быть, весь этот текст — это книга, полная текста на элемент? 🙂

4. Хотя шесть привязок на элемент списка или строку, но мне нужно, чтобы они могли обновлять их динамически.

5. Подумайте о том, чтобы не использовать привязки, чтобы посмотреть, поможет ли это. Я слышал, что привязки могут быть потенциально медленными, и хотя 53 элемента — это не так много — 6 привязок на элемент звучит слишком много. Посмотрите, можете ли вы ограничить это число. Вы также можете вообще не использовать привязки. Вы можете использовать DataContextChanged событие в представлении элемента и по этому событию синхронизировать значения из модели и представления. Вы также можете ListView подклассировать и переопределить PrepareContainerForItemOverride , может быть, вам не нужны все из них, пока ваш элемент не будет выбран? Также убедитесь, что доступ к любым свойствам модели просмотра ваших привязок не замедляется.