Search code examples
silverlightxamlwcf-ria-services

Performance - Silverlight ContextMenuService in ListBox


Using Silverlight5, RIA Services, DataPager for a 7500row query into a ListBox.

Got an interesting problem - after paging through 500 or so items, memory usage goes from 70MB to 250MB ish, and performance degrades horribly.

If I comment out ContextMenuService, it all works fine.

Problem: How to implement a performant right click functionality on each listboxitem?

<ListBox x:Name="AccountItems" SelectionMode="Extended" ItemsSource="{Binding Data, ElementName=AccountsDataSource}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">

    <ListBox.ItemTemplate>
        <DataTemplate>
            <ListBoxItem>
                <TextBlock Grid.Column="2" Name="textBlockCaptionFirstName" Text="{Binding FirstName}" HorizontalAlignment="Left" TextAlignment="Center" TextWrapping="Wrap" >
                    <!-- Right click -->
                    <controlsInputToolkit:ContextMenuService.ContextMenu>
                        <controlsInputToolkit:ContextMenu>
                            <controlsInputToolkit:MenuItem Header="Convert account to another User" Click="Person_Click">
                                <controlsInputToolkit:MenuItem.Icon>
                                    <Rectangle Width="16" Height="16" Fill="{StaticResource PersonAccountIcon}"/>
                                </controlsInputToolkit:MenuItem.Icon>
                            </controlsInputToolkit:MenuItem>
                            <controlsInputToolkit:MenuItem Header="Convert account to a System account" Click="ServiceAccount_Click">
                                <controlsInputToolkit:MenuItem.Icon>
                                    <Rectangle Width="16" Height="16" Fill="{StaticResource ServiceAccountIcon}"/>
                                </controlsInputToolkit:MenuItem.Icon>
                            </controlsInputToolkit:MenuItem>

                            <controlsInputToolkit:Separator/> snip....

Solution

  • Problem/workaround is described here