2010-03-24 10 views
9

Se dovessi dire "diamine con quello!", Potrei semplicemente dare il mio ListView con SelectionMode = "Multiple" un nome, ed essere in grado di ottenere tutti gli elementi selezionati molto facilmente. Ma sto cercando di aderire a MVVM il più possibile, e voglio in qualche modo associare ad un ObservableCollection che detiene il valore dalla colonna Nome per ogni elemento selezionato. Come diavolo fai questo? La selezione singola è semplice, ma la soluzione di selezione multipla non è ovvia per me con la mia attuale conoscenza di WPF/MVVM. I read this question on SO e, mentre mi dà una buona idea, non so come aggiungere il binding necessario a una riga, perché sto usando un ListView con un GridView come View, non un ListBox.ListView + MultipleSelect + MVVM =?

Ecco ciò che il mio XAML appare fondamentalmente come:

<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> 

Sembra la cosa giusta da fare è quello di DataBind proprietà IsSelected di ogni riga per ogni oggetto memorizzato nel ObservableCollection sto associazione dati a. Non ho capito come farlo.

risposta

11

Write ItemContainerStyle sul ListView e mettere un Setter per fare il legame con il vostro ViewModel 'IsSelected' proprietà

<Style TargetType="{x:Type ListViewItem}"> 
    <Setter Property="IsSelected" Value="{Binding IsSelected,Mode=OneWayToSource}"/> 
+0

ah! Ha senso quando ti viene consegnato su un piatto d'argento. Grazie mille, Jobi. Darò quel vortice stasera e segnerò questo come risposta una volta che lo confermerò. – Dave

+0

Jobi, che ha fatto il trucco, grazie !!! – Dave