0

グリッドを表示する仮想化された 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>

そして、アイテムを選択すると、すべてが正常に機能します... 選択

しかし、2 番目のアイテムを選択すると、システムは StackOverflow をスローします...なぜなのかわかりません。

すべての仮想リスト メソッドにブレークポイントがありますが、2 番目の項目をクリックしても、いずれのメソッドも呼び出されません。

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();
    }
4

0 に答える 0