ListView + MultipleSelect + MVVM =?
si je devais dire "au diable!", Je pourrais simplement donner mon ListView avec SelectionMode= "Multiple" un nom, et être capable d'obtenir tous les éléments sélectionnés très facilement. Mais j'essaie de m'en tenir à MVVM autant que possible, et je veux d'une certaine façon databind à une collection observable qui détient la valeur de la colonne du nom pour chaque élément sélectionné. Comment faites-vous cela? La sélection simple est simple, mais la solution de sélection multiple ne me paraît pas évidente avec mon WPF / MVVM actuel connaissance.
I lisez cette question sur SO, et bien que cela me donne un bon aperçu, Je ne sais pas comment ajouter la liaison nécessaire à une rangée, parce que j'utilise une ListView avec une GridView comme Vue, pas une ListBox.
voici à quoi ressemble mon XAML:
<ListView DockPanel.Dock="Top" ItemsSource="{Binding ClientPreview}" SelectionMode="Multiple">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridViewColumn Header="Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Address">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Address}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
il semble que la bonne chose à faire est de databind la propriété IsSelected de chaque ligne à chaque objet stocké dans la collection observable à laquelle je suis databinding. Je viens de n'ai pas compris comment faire.
1 réponses
Ecrire ItemContainerstyle sur la ListView et mettre un Setter pour faire la liaison à votre propriété ViewModel 'IsSelected'
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected,Mode=OneWayToSource}"/>