首页 > 解决方案 > ListBox 中的 WPF 性能问题

问题描述

你好谁能告诉我在下面的代码中哪里出错了,

<ListView x:Name="ServiceListView" 
                                  Loaded="ServiceListView_Loaded" 
                                  ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                                  VirtualizingPanel.IsVirtualizing="True"
                                  GridViewColumnHeader.Click="ServiceListSort"
                                  ScrollViewer.IsDeferredScrollingEnabled="True"
                                  VirtualizingStackPanel.VirtualizationMode="Recycling">
                                <ListView.View>

                                    <GridView>
                                        <GridViewColumn  Width="50">
                                            <GridViewColumn.CellTemplate>
                                                <DataTemplate>
                                                <RadioButton IsChecked="{Binding Status}" x:Name="StartService" Checked="StartService_Checked" GroupName="{Binding ServiceName}" Style="{DynamicResource StartServiceStyle}"/>
                                            </DataTemplate>
                                            </GridViewColumn.CellTemplate>
                                        </GridViewColumn>
                                        <GridViewColumn  Width="50" >
                                            <GridViewColumn.CellTemplate>
                                                <DataTemplate>
                                                    <DataTemplate.Resources>
                                                        <local:InvertBooleanConverter x:Key="InvertBooleanConverter" />
                                                    </DataTemplate.Resources>
                                                    <RadioButton IsChecked="{Binding Status, Converter={StaticResource InvertBooleanConverter}}" Checked="StopService_Checked"  x:Name="StopService"  GroupName="{Binding ServiceName}" Style="{DynamicResource StopServiceStyle}" />
                                                </DataTemplate>
                                            </GridViewColumn.CellTemplate>
                                        </GridViewColumn>
                                        <GridViewColumn Width="120" DisplayMemberBinding="{Binding ReccomendedStatus}">
                                            <GridViewColumn.Header>
                                                <GridViewColumnHeader Content="Recommendation"/>
                                            </GridViewColumn.Header>
                                        </GridViewColumn>
                                        <GridViewColumn Width="750" DisplayMemberBinding="{Binding ServiceName}">
                                            <GridViewColumn.Header>
                                                <GridViewColumnHeader Content="Description"/>
                                            </GridViewColumn.Header>
                                        </GridViewColumn>
                                    </GridView>
                                </ListView.View>
                            </ListView>

目前它有 20-40 个项目,其中只有 7 个可见,大约需要 5-7 秒,删除两个单选按钮 Checked 事件时间减少到 2-4 秒

private void ServiceListView_Loaded(object sender, RoutedEventArgs e)
    {
        ServiceListView.ItemsSource = DATA_CONTROLS.ServiceData.Values;
    }

public static Dictionary<int, DataObject> ServiceData = new Dictionary<int, DataObject>();

为什么在msdn中显示需要这么长时间我看到显示1000个项目只需要1.6秒,为什么这个包含20-40个项目的方法需要5-7秒?我真的需要知道是什么导致了这种性能问题。谢谢你。

发现一个问题:当我设置时:ServiceListView.ItemsSource = DATA_CONTROLS.ServiceData.Values;它会自动触发单选按钮事件,这会导致性能下降,同时使用 IsAsynch 也提高了性能。

标签: c#wpflistview

解决方案


在您的 ListView 中添加“IsAsync=True”,以提高性能


推荐阅读