2010-03-24 15 views
9

Si tuviera que decir "diablos con eso!", Podría simplemente darle a mi ListView con SelectionMode = "Multiple" un nombre, y ser capaz de obtener todos los elementos seleccionados con mucha facilidad. Pero estoy tratando de adherirme a MVVM tanto como sea posible, y quiero de alguna manera vincular datos a una ObservableCollection que contenga el valor de la columna Name para cada elemento seleccionado. ¿Cómo demonios haces esto? La selección simple es simple, pero la solución de selección múltiple no es obvia para mí con mi conocimiento actual de WPF/MVVM.ListView + MultipleSelect + MVVM =?

I read this question on SO, y aunque me da una buena idea, no sé cómo agregar el enlace necesario a una fila, porque estoy usando un ListView con un GridView como su Vista, no como un ListBox.

Aquí es lo que mi XAML básicamente se parece a:

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

Suena como lo que hay que hacer es DataBind propiedad IsSelected de cada fila para cada objeto almacenado en el ObservableCollection Estoy enlace de datos a. Simplemente no he descubierto cómo hacer esto.

Respuesta

11

Escribir ItemContainerStyle en el ListView y poner un Setter para hacer la unión a la propiedad de su modelo de vista 'IsSelected'

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

ah! Eso tiene sentido cuando te lo dan en bandeja de plata. Muchas gracias, Jobi. Voy a darle un giro esta noche y marcaré esto como respondido una vez que lo confirme. – Dave

+0

¡Jobi, eso fue lo único que hizo, gracias! – Dave