【发布时间】:2011-08-16 22:44:50
【问题描述】:
我想知道我是否遗漏了一些明显的东西。
我有一个简单的窗口,其中有一个包含 3 列的 ListView。 一个显示文本,另外两个包含组合框。
ListView 大约有。 500 条记录和组合框都从同一个联系人列表中提取,该联系人列表大约有 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>
【问题讨论】:
标签: wpf performance combobox binding