W mojej aplikacji mam widok listy ze stylem kontenera elementu powiązanym z właściwością IsSelected w moim modelu widoku.Wyświetlenie wirtualizacji i odznaczenie wszystkich elementów
Mam również ustawić powiązanie wejścia na liście, aby obsłużyć wybór wszystkich elementów na liście programowo, ponieważ ustawienie domyślne nie działa z powodu panelu stosu wirtualizacji. Działa to dobrze i dobrze.
Problem pojawia się, gdy użytkownik klika pojedynczy element listy po naciśnięciu CTRL + A. To, co powinien się spodziewać użytkownik, to pojedynczy nowy element kliknięty staje się jedynym wybranym elementem. W rzeczywistości listview nie aktualizuje właściwości IsSelected dla obiektów poza zasięgiem wzroku, a tylko aktualnie widoczne elementy stają się niezaznaczone.
Jak prawidłowo obsłużyć to zachowanie?
<ListView
Name="sortList"
Grid.Row="1"
ItemsSource="{Binding RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type UserControl}},
Path=ItemsSource, Mode=TwoWay}">
<ListView.InputBindings>
<KeyBinding Gesture="CTRL+A" Command="{Binding SelectAllCommand}" />
</ListView.InputBindings>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="3" />
<Setter
Property="IsSelected"
Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
Oto polecenie wyboru wszystkich.
private RelayCommand _selectAllCommand;
public System.Windows.Input.ICommand SelectAllCommand
{
get
{
if (_selectAllCommand == null)
_selectAllCommand = new RelayCommand(param => this.SelectAll());
return _selectAllCommand;
}
}
private void SelectAll()
{
foreach (object o in this.Objects)
if (!this.SelectedItems.Contains(order))
order.IsSelected = true;
}
Proszę zaksięgować swoją SelectAllCommand – Paparazzi