Имею ListView с ContextMenu:
<Window x:Class="WPF_ListView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Table test: ListView" Width="800" Height="400"
Loaded="Window_Loaded">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button Name="btnAdd" Content="Add" Width="90" Click="btnAdd_Click" />
</StackPanel>
<ListView x:Name="listView" Grid.Row="1">
<!--
https://stackoverflow.com/questions/296533/wpf-listview-very-slow-performance-why-elementhost-or-other-reason
-->
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Label Content="{Binding Name}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="A" Width="90" DisplayMemberBinding="{Binding FieldA}" />
<GridViewColumn Header="B" Width="90" DisplayMemberBinding="{Binding FieldB}" />
</GridView>
</ListView.View>
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy" />
</ContextMenu>
</ListView.ContextMenu>
</ListView>
</Grid>
</Window>
У ListView включена группировка элементов:
private ObservableCollection<Model> items = new ObservableCollection<Model>();
...
private void Window_Loaded(object sender, RoutedEventArgs e)
{
listView.ItemsSource = items;
listView.Items.GroupDescriptions.Clear();
listView.Items.GroupDescriptions.Add(new PropertyGroupDescription("FieldB"));
AddItems(600);
}
Если использована группировка, то после нажатия ПКМ, программа начинает тормозить. Во-первых, само меню открывается только через 5-6 секунд. Во-вторых, если начать водить мышкой по ListView, то видно, что ему очень плохо. При этом не важно, меню всё ещё открыто или уже закрыто.
Если группировку выключить - всё нормально.
Вот ссылка на коммит из тестового проекта:
Может код кривой, я не знаю Но в интернете они, вроде, как-то так делают Только без меню.