我想知道我是否遗漏了一些明显的东西。
我有一个简单的窗口,里面有一个包含3列的ListView。 一个显示文本,另外两个包含组合框。
ListView有约。 500个记录和组合框都来自同一个联系人列表,大约有。其中有8,000条记录。
我正在使用MVVM。
此窗口需要永久打开,一旦打开它实际上是冻结的(它移动得太慢)
对数据库的查询需要十秒钟(我在VM完全加载时记录)然后打开窗口需要两到三分钟。
我确保将List<T>
中的两个列表存储在我的VM中,以确保它不会重新处理数据或类似的内容。
如下所示。我已经尝试过明确使用虚拟化堆栈面板,但这没什么用。
感谢您的帮助
<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>
答案 0 :(得分:0)
我有同样的问题,最后想出来......
恰好ListView嵌套在Infragistic TabControl中,并且每次在ListView中绑定某些内容(即:ComboBoxes)时,TabControl的“SelectionChange”都会被触发,导致延迟......
我还使用原生的Microsft TabControl进行了测试,但我得到了相同的行为,但性能稍微高一些。
我通过验证SelectionChangedEventArgs解决了这个问题...确保e.AddedItems在处理之前只包含“TabItem”(而不是ComboBox)。
希望它有所帮助,