Au cours de mon apprentissage de MVVM, j'ai acquis des connaissances de base sur WPF et le modèle ViewModel. J'utilise l'abstraction suivante lorsque je fournis une liste et je suis intéressé par un seul élément sélectionné.Gestion de plusieurs sélections avec MVVM
public ObservableCollection<OrderViewModel> Orders { get; private set; }
public ICollectionView OrdersView
{
get
{
if(_ordersView == null)
_ordersView = CollectionViewSource.GetDefaultView(Orders);
return _ordersView;
}
}
private ICollectionView _ordersView;
public OrderViewModel CurrentOrder
{
get { return OrdersView.CurrentItem as OrderViewModel; }
set { OrdersView.MoveCurrentTo(value); }
}
Je peux alors lier le OrdersView avec le soutien de tri et de filtrage à une liste WPF:
<ListView ItemsSource="{Binding Path=OrdersView}"
IsSynchronizedWithCurrentItem="True">
Cela fonctionne très bien pour les vues de sélection unique. Mais j'aimerais aussi prendre en charge plusieurs sélections dans la vue et faire en sorte que le modèle soit lié à la liste des éléments sélectionnés.
Comment lier les ListView.SelectedItems à une propriété de backer sur le ViewModel?
Veuillez noter que cette solution ne fonctionne pas lorsque vous utilisez un VirtualizingStackPanel dans la ListBox (qui est la valeur par défaut). Plus d'infos sur ce post: http://stackoverflow.com/questions/1273659/virtualizingstackpanel-mvvm-multiple-selection – decasteljau
Bonne prise. Merci pour la mise à jour. Pour la sélection unique, la meilleure solution est ICollectionView. Microsoft doit créer une interface ICollectionView prenant en charge la multi-sélection. –
Vous venez de me sauver la vie! – jpsstavares