Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP Listview在绑定海量数据时变得非常缓慢_C#_Xaml_Listview_Uwp_Uwp Xaml - Fatal编程技术网

C# UWP Listview在绑定海量数据时变得非常缓慢

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

我正在尝试使用ObservableCollection将数据绑定到listview

我的XAML是这样的

<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
    
                }
            }