0

ListView の項目が多すぎるため、'VirtualizingStackPanel.IsVirtualizing' を true に設定し、'VirtualizingStackPanel.VirtualizationMode' を 'Recycling' に設定しました。ListView の SelectionMode は拡張され、ListViewItem の 'IsSelected' プロパティはモデルの 'IsSelected' プロパティにバインドされ、バインド モードは双方向です。

Ctrl+A ですべての項目を選択したい場合、項目の一部しか選択されないため、以下のように KeyBinding を使用して select all メソッドを記述します。

 <KeyBinding Command="{Binding SelectAllCommand}"
                            Modifiers="Control"
                            Key="A"/>

SelectAll メソッドは、ItemsSource コレクションをループし、各項目の IsSelected プロパティを true に設定します。しかし、それは予期せぬ事態にもつながります。すべてのアイテムが選択されたら、スクロールバーを一番下までスクロールすると、ListView にさらにアイテムが読み込まれます。1 つのアイテムをシングルクリックすると、他のすべてのアイテムが選択されていないことが予想され、このアイテムのみを選択します。しかし、他のアイテムの選択を解除することはできないようです。

誰でも助けることができますか?

4

1 に答える 1

-1

ロードされた UI 要素でしか動作しないため、セレクターのこの動作は予期されたものです。仮想化を有効にしたため、可視領域に含まれる要素のみが読み込まれました。そのため、セレクターは他のユーザーについて「認識」していません。

これを修正するには、Selector が以前に選択したアイテムを「認識」するようにする必要があります。つまり、選択された UI 要素のアンロードを禁止する必要があります。

まず、ブラックジャックと売春婦を備えた独自の仮想化パネルを作成します。

public class MyVirtualizingStackPanel : VirtualizingStackPanel
{
    protected override void OnCleanUpVirtualizedItem(CleanUpVirtualizedItemEventArgs e)
    {
        var item = e.UIElement as ListBoxItem;
        if (item != null && item.IsSelected)
        {
            e.Cancel = true;
            e.Handled = true;
            return;
        }

        var item2 = e.UIElement as TreeViewItem;
        if (item2 != null && item2.IsSelected)
        {
            e.Cancel = true;
            e.Handled = true;
            return;
        }

        base.OnCleanUpVirtualizedItem(e);
    }
}

次に、ListBox、ListView、TreeView、またはセレクターを提供するその他のユーザー コントロールのデフォルト パネルを置き換えます。たとえば、スタイルを介して:

<Setter Property="ItemsPanel">
    <Setter.Value>
        <ItemsPanelTemplate>
            <blackjackandhookers:MyVirtualizingStackPanel/>
        </ItemsPanelTemplate>
    </Setter.Value>
</Setter>

...または、セレクターで直接:

<YourSelector.ItemsPanel>
    <ItemsPanelTemplate>
        <blackjackandhookers:MyVirtualizingStackPanel/>
    </ItemsPanelTemplate>
</YourSelector.ItemsPanel>

楽しみ!

私の答えがお役に立てば幸いです。

于 2015-04-09T18:04:20.773 に答える