wpf select mvvm datagrid checkbox

wpf - Seleccione todas las casillas de verificación en las filas de la cuadrícula de datos del modelo de vista



select mvvm (1)

Utilizo Caliburn Micro como framework MVVM en la aplicación WPF. Tengo un pequeño problema de cómo seleccionar todas las casillas en el control de la cuadrícula de datos. Cada fila de cuadrícula de datos tiene casilla de verificación.

Ato el tipo de propiedad de la cuadrícula de datos de la lista.

Modelo:

public class Bill : INotifyPropertyChanged { public string CellPhoneNo { get { return _cellPhoneNo; } set { _cellPhoneNo = value; NotifyPropertyChanged("CellPhoneNo"); } } public bool IsSelected { get { return _isSelected; } set { _isSelected = value; NotifyPropertyChanged("IsSelected"); } }

ViewModel:

public IList<Bill> TmobileBill { get { return _tmobileBill; } set { _tmobileBill = value; NotifyOfPropertyChange(()=>TmobileBill); } }

Ver:

<Controls:DataGrid ItemsSource="{Binding Path= TmobileBill, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource FinalBillsView_CallsDataGrid}" Grid.Row="0" CanUserResizeRows="False"> <Controls:DataGrid.RowHeaderTemplate> <DataTemplate> <Grid> <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Controls:DataGridRow}}}"/> </Grid> </DataTemplate> </Controls:DataGrid.RowHeaderTemplate> <Controls:DataGrid.Columns> <Controls:DataGridTextColumn IsReadOnly="True" CellStyle="{StaticResource FinalBillsView_DataGrid_CellStyle}" Binding="{Binding Path=CellPhoneNo}" HeaderStyle="{StaticResource FinalBillsView_DataGridColHeaderStyle}" Header="Cell phone No"/> </Controls:DataGrid.Columns> </Controls:DataGrid>

En datatemplate para la fila datragrid me enlace en la propiedad de checbox. La propiedad IsChecked IsSelected de la clase Bill.

<Controls:DataGrid.RowHeaderTemplate> <DataTemplate> <Grid> <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Controls:DataGridRow}}}"/> </Grid> </DataTemplate> </Controls:DataGrid.RowHeaderTemplate>

El problema es si establezco la propiedad IsSelected en verdadero para todos los elementos en la lista.

foreach (var row in TmobileBill) { row.IsSelected = true; }

Las casillas de verificación en la vista no están marcadas. ¿Cuál es la raíz del problema?

Gracias.


  1. Intenta cambiar IList<Bill> a ObservableCollection<Bill>
  2. Intente utilizar un enlace simple <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"/>

Para fines de depuración, defina junto con el siguiente control CheckBox para ver qué se une realmente a RowItem:

<TextBlock Text="{Binding}"></TextBlock>