2009-08-04 24 views
12

Tengo una cuadrícula de datos en WPF que estoy vinculando a un objeto.WPF Toolkit Datagrid: ¿cómo desactivas la selección?

Tengo un DataGridCheckBoxColumn allí que quiero que los usuarios puedan pasar y marcar los que quieran. El problema es que tienen que hacer clic dos veces, una para seleccionar y otra para marcar/desmarcar. Cómo diablos apagas esto, he estado buscando la forma de anhelar encontrar la respuesta a esto. La cuadrícula de datos tiene las propiedades SelectionMode y SelectionUnit, ninguna de las cuales acepta 'none' o 'go away'

¡Se agradece cualquier ayuda! Mi código está a continuación para referencia

<my:DataGrid Margin="15" Name="dgPreview" 
     AutoGenerateColumns="False" CanUserSortColumns="True" 
      CanUserDeleteRows="True" 
      Background="White" 
      ColumnHeaderHeight="20" 
      VerticalScrollBarVisibility="Visible" 
      RowDetailsVisibilityMode="Visible" 
      > 

    <my:DataGrid.Columns> 
     <my:DataGridCheckBoxColumn MinWidth="50" Width="Auto" Header="Include" Binding="{Binding Include}" /> 
     <my:DataGridTextColumn MinWidth="50" Width="Auto" Header="Override #" Binding="{Binding OverrideNumber}" /> 
     <my:DataGridTextColumn MinWidth="220" Width="*" Header="Name" Binding="{Binding Name}" /> 
     <my:DataGridTextColumn MinWidth="50" Width="Auto" IsReadOnly="True" Header="Preview" Binding="{Binding Preview}" /> 
    </my:DataGrid.Columns> 
</my:DataGrid> 
+0

Pregunta más reciente sobre este tema, con muchas buenas respuestas: http://stackoverflow.com/questions/3833536/how-to-perform-single-click-checkbox-selection-in-wpf-datagrid/8333704#8333704 – surfen

Respuesta

19

El primer clic pone la celda en modo edición luego el segundo clic le permite modificar la casilla de verificación. Puede cambiar este comportamiento utilizando un DataGridTemplateColumn en lugar de un DataGridCheckBoxColumn. Reemplazar su DataGridCheckBoxColumn con esto:

<my:DataGridTemplateColumn MinWidth="50" Width="Auto" Header="Include" SortMemberPath="Include"> 
    <my:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
     <CheckBox Style="{StaticResource DataGridCheckBoxStyle}" IsChecked="{Binding Path=Include}" /> 
     </DataTemplate> 
    </my:DataGridTemplateColumn.CellTemplate> 
</my:DataGridTemplateColumn> 

DataGridCheckBoxStyle sólo hace que la casilla de verificación se ven un poco más agradable en la cuadrícula de datos:

<Style x:Key="DataGridCheckBoxStyle" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}"> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
    <Setter Property="Margin" Value="8,0,3,0" /> 
</Style> 
+0

excelente, ¡gracias, John! – RodH257

+2

No funciona para mí en WPF 4.0. Gracias por el estilo. :) – bugfixr

+0

Funciona para mí en WPF 4.0. Sin embargo, recibo una advertencia al compilar y en el diseñador para el etiquetado "Basado en" en el estilo: 'The Resource" {x: Type CheckBox} "no se encontró'. Lo eliminé y aún funciona. – OneWorld

1

En primer lugar, sé que esto es una pregunta bastante viejo, pero todavía pensaba yo' intentarlo y responderlo.

Tuve el mismo problema hace un par de días y me encontré con una solución sorprendentemente corta (ver this blog). Básicamente, todo lo que tiene que hacer es reemplazar la definición DataGridCheckBoxColumn en su XAML con lo siguiente:

<DataGridTemplateColumn Header="MyCheckBoxColumnHeader"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding Path=MyViewModelProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

La ventaja de esta solución es obvia - es de sólo XAML; por lo tanto, evita que cargue su código de retorno con lógica de UI adicional y lo ayuda a mantener su estado a los ojos de los fanáticos de MVVM;).

+0

Es la misma respuesta que la anterior. – BenjaminPaul

+0

Gracias por esta respuesta. Lo anterior no funcionó para mí en el sentido de que hacer clic en una casilla de verificación no cambiaba realmente los objetos subyacentes. Creo que el hecho de que haya agregado en el modo = TwoWay solucionó ese problema. – muaddib

Cuestiones relacionadas