En mi aplicación tengo una vista de lista con un estilo de contenedor de elementos ligado a la propiedad IsSelected en mi modelo de vista.Virtualización de Listview y anulación de la selección de todos los elementos
También he configurado un enlace de entrada en la vista de lista para manejar la selección de todos los elementos de la lista de forma programática, ya que el valor predeterminado no funciona debido al panel de pila de virtualización. Esto funciona bien.
El problema surge cuando el usuario hace clic en un solo elemento de la lista después de presionar CTRL + A. Lo que el usuario debe esperar es que el único elemento nuevo al que se hace clic se convierta en el único elemento seleccionado. Lo que sucede en realidad es que la vista de lista no actualiza la propiedad IsSelected para los elementos que no se ven, y solo los elementos actualmente visibles se vuelven no seleccionados.
¿Cómo puedo manejar este comportamiento correctamente?
<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>
Aquí está el comando seleccionar todo.
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;
}
Por favor, publique su SelectAllCommand – Paparazzi