选择虚拟化XAML ListView中的项会抛出StackOverflow

时间:2013-10-31 11:26:29

标签: c# wpf xaml listview virtual

我有一个带有虚拟化ListView的XAML表单来显示网格:

<Window x:Class="WpfVirtualList.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <Style x:Key="lvStyle" TargetType="{x:Type ListView}">
        <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
        <Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
        <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="True"/>
        <Setter Property="ListView.ItemsSource" Value="{Binding}"/>
        <Setter Property="ListView.View">
            <Setter.Value>
                <GridView>
                    <GridViewColumn Header="Cups" Width="200">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding CUPS}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="MeterId" Width="150">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding MeterID}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Matricula" Width="100">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding MatriculaCT}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsLoading}" Value="True">
                <Setter Property="ListView.Cursor" Value="Wait"/>
                <Setter Property="ListView.Background" Value="LightGray"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <ListView x:Name="lv" HorizontalContentAlignment="Stretch" Style="{DynamicResource lvStyle}" SelectionChanged="lv_SelectionChanged" />
</Grid>
</Window>

当我选择一件商品时一切正常...... Selection

但是当我选择第二项时,系统会抛出一个StackOverflow ......我不知道为什么。

我在所有虚拟列表方法中都有断点,但是当我点击第二个项目时,没有一个断点被调用。

我在SelectionChanged事件中有一个断点,也没有被调用。

    //CUPS is the id
    private void lv_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if(e.RemovedItems.Count > 0)
            Debug.WriteLine("selected: "+((ItemClass)e.RemovedItems[0]).CUPS);
        if(e.AddedItems.Count > 0)
            Debug.WriteLine("unselected: " + ((ItemClass)e.AddedItems[0]).CUPS);
    }

我修复了它控制GotFocus事件并取消选择所有...但这不是解决这个问题的方法。

    private void lv_GotFocus(object sender, RoutedEventArgs e)
    {
        lv.UnselectAll();
    }

0 个答案:

没有答案