我想知道我是否错过了一些明显的东西。WPF组合框在ListView中的性能
我有一个简单的窗口,里面有3列的ListView。 一个显示文本,另外两个在其中包含组合框。
该ListView约有。 500条记录和组合框都从同一个联系人列表中拉出来, 8,000条记录。
我正在使用MVVM。
这个窗口需要永远打开,一旦它打开它实际上是冻结的固体(它的动作这么慢)
查询到数据库中取十秒钟之(我登录时的VM满载)那么需要两三分钟来打开窗口。 我确保将两个列表都存储在我的虚拟机中的List<T>
中,以确保它不会重新处理数据或类似的东西。
正如你可以看到下面。我已经明确尝试使用虚拟化堆叠面板,但这并没有多大帮助。
感谢您的帮助
<DataTemplate x:Key="ComboboxItemTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Grid.RowSpan="3" Source="{Binding ImageURL, IsAsync=True}" Width="50" />
<TextBlock Grid.Column="1" Text="{Binding Name}" />
<TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Email}" />
<TextBlock Grid.Column="1" Grid.Row="2" Text="{Binding CampusName}" />
</Grid>
</DataTemplate>
<ListView ItemsSource="{Binding MainList}" IsSynchronizedWithCurrentItem="True" Grid.RowSpan="2">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.View>
<GridView>
<GridViewColumn Width="200" Header="Internal">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
<TextBlock Text="{Binding MName}" />
<TextBlock Text="{Binding CampusName}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="200" Header="Contact1">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource VM}, Path=ContactList, IsAsync=True}" SelectedValue="{Binding HisContactID}" SelectedValuePath="id" ItemTemplate="{StaticResource ComboboxItemTemplate}" Background="{Binding HisColor}" Margin="0,82,0,115" Grid.Row="1" Grid.Column="1">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="200" Header="Contact2">
...
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>