C# UWP Listview在绑定海量数据时变得非常缓慢
我正在尝试使用ObservableCollection将数据绑定到listview 我的XAML是这样的C# UWP Listview在绑定海量数据时变得非常缓慢,c#,xaml,listview,uwp,uwp-xaml,C#,Xaml,Listview,Uwp,Uwp Xaml,我正在尝试使用ObservableCollection将数据绑定到listview 我的XAML是这样的 <ScrollViewer x:Name="svListEarthquakes" Grid.Row="2" Grid.ColumnSpan="4" ViewChanged="svListEarthquakes_ViewChanged"> <ListView x:Name="listEarthquakes" IsItemClickEnabled="Tr
<ScrollViewer x:Name="svListEarthquakes" Grid.Row="2" Grid.ColumnSpan="4" ViewChanged="svListEarthquakes_ViewChanged">
<ListView x:Name="listEarthquakes" IsItemClickEnabled="True" SelectionMode="Single" ItemsSource="{x:Bind ObsList}" ItemClick="listEarthquakes_ItemClick">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
<Setter Property="BorderBrush" Value="LightGray"></Setter>
<Setter Property="BorderThickness" Value="0,0,0,1"></Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" TextWrapping="WrapWholeWords" Text="{Binding properties.mag}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="1" TextWrapping="WrapWholeWords" Text="{Binding Path=properties.time,Converter={StaticResource cvtDate}}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="2" TextWrapping="WrapWholeWords" Text="{Binding geometry.coordinates[0]}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="3" TextWrapping="WrapWholeWords" Text="{Binding geometry.coordinates[1]}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="4" TextWrapping="WrapWholeWords" Text="{Binding geometry.coordinates[2]}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="5" TextWrapping="WrapWholeWords" Text="{Binding properties.place}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ScrollViewer>
和C#代码
private async Task DisplayDataAsync()
{
WriteLine(“BeginRequest”+DateTime.Now);
var repsonse=(Application.Current as App).gearthquakegeojson=wait httpsequences.getDearthquakegeojsonasync(strrequestur);
if(repsonse.metadata.status==200)
{
Debug.WriteLine(“EndRequest”+DateTime.Now);
WriteLine(“BeginxBind”+DateTime.Now);
Debug.WriteLine(“Count”+repsonse.metadata.Count);
ObsList.Clear();
如果(repsonse.metadata.count>0)
{
//List fis=新列表();
foreach(在repsonse.features中的FeaturesItem em em)
{
FeaturesItem fi=新FeaturesItem
{
type=em.type,
属性=em.properties,
几何=em.geometry,
id=em.id
};
添加(fi);
}
//listerhquakes.ItemsSource=ObsList;
Debug.WriteLine(“EndxBind”+DateTime.Now);
}
其他的
{
//没有数据
}
}
其他的
{
//净误差
}
}
注意:
getDearthQuakeGeoJSonaSync()返回所有数据
例如:
2017年8月17日开始下午5:38:20
完2017年8月17日下午5:38:21
2017年8月17日开始下午5:38:21
计数1798
完2017年8月17日下午5:38:21
我使用Debug.WriteLine打印时间,发现web请求和响应时间很短,ObsList.Add(fi)也需要一些时间
但是我的软件在向下滚动时非常慢
那么如何改进呢,非常感谢
ListView
上删除ScrollViewer
。它禁用ListView
虚拟化<代码>列表视图拥有自己的ScrollViewer
ListView
在此处阅读有关虚拟化的内容:您不需要专门启用ListView虚拟化。默认情况下是打开的。哇,太棒了!非常感谢@Mikolaytis和@Justin XL
private async Task DisplayDataAsync()
{
Debug.WriteLine("BeginRequest " + DateTime.Now);
var repsonse = (Application.Current as App).gEarthquakesGeoJson = await HttpEarthquakes.GetdEarthquakesGeoJsonAsync<EarthquakesModel>(strRequestUrl);
if (repsonse.metadata.status == 200)
{
Debug.WriteLine("EndRequest " + DateTime.Now);
Debug.WriteLine("BeginxBind " + DateTime.Now);
Debug.WriteLine("Count " + repsonse.metadata.count);
ObsList.Clear();
if (repsonse.metadata.count > 0)
{
//List<FeaturesItem> fis = new List<FeaturesItem>();
foreach (FeaturesItem em in repsonse.features)
{
FeaturesItem fi = new FeaturesItem
{
type = em.type,
properties = em.properties,
geometry = em.geometry,
id = em.id
};
ObsList.Add(fi);
}
//listEarthquakes.ItemsSource = ObsList;
Debug.WriteLine("EndxBind " + DateTime.Now);
}
else
{
//No Data
}
}
else
{
//Net Error
}
}