Я создаю такую страницу, как домашняя страница NetFlix. Он имеет множество (20+) GirdView
с (одна строка включена), вложенных во внешний ListView
. Все элементы не определены, поэтому они должны быть созданы во время выполнения.
Поэтому я разработал, как показано ниже:
Xaml:
<Page.Resources>
<DataTemplate x:Key="FirstLevelListViewItemTemplate" x:DataType="model:CategoriesItem">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="{x:Bind CategoryName}" FontSize="28"/>
<GridView
Grid.Row="1"
Height="200"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.VerticalScrollMode="Disabled"
ItemsSource="{x:Bind categories, Mode=OneWay}">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Vertical"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate x:DataType="model:CategoryItem">
<controls:ImageEx IsCacheEnabled="True" Width="250" Source="{x:Bind cover_image_url}"/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</Grid>
</DataTemplate>
</Page.Resources>
<!--<ScrollViewer>-->
<ListView x:Name="list"
SelectionMode="None"
ItemTemplate="{StaticResource FirstLevelListViewItemTemplate}">
<!--Disable ListView UI virtualization-->
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
<!--</ScrollViewer>-->
Файл модели:
public class CategoriesItem
{
public string CategoryName { get; set; }
public List<CategoryItem> categories { get; set; }
}
public class CategoryItem
{
public string cover_image_url { get; set; }
}
.cs file
используется для загрузки данных из локальной сети:
list.ItemsSource = await GetData();
Итак
Сцена 1:
Запустите приложение с включенной виртуализацией пользовательского интерфейса ListView
, процесс связывания выполняется очень быстро и объем памяти составляет около 300 МБ. Затем с помощью мыши быстро прокручивайте ListView вверх / вниз, ListView
прокручивает вверх и вниз очень медленно и показывает данные очень медленно после пустого экрана.
![enter image description here](https://i.stack.imgur.com/NBBzo.png)
Сцена 2:
Запустите приложение с отключенной виртуализацией пользовательского интерфейса ListView
, на этот раз процесс связывания занимает очень много времени, и объем памяти может увеличиться до 1 ГБ. Но прокручивая вверх / вниз ListView быстро, все в порядке.
Мои потребности:
- Прокрутка вверх / вниз ListView быстро выполняется быстро.
- Быстрый процесс привязки и нехватка памяти.
Как исправить?
Как это исправить, большое спасибо.
![enter image description here](https://i.stack.imgur.com/5yWIB.jpg)