2012-05-18 21 views
13

Estoy utilizando DataGrid del kit de herramientas WPF en .NET 3.5.DataGridCheckboxColumn enlace bidireccional

Tengo una columna de cuadrícula de datos vinculada a una propiedad booleana de mi objeto de origen.

La casilla de verificación está llamando a las propiedades booleanas para obtener acceso correcto.

Sin embargo, al marcar o desmarcar la casilla se llama al get en lugar del conjunto.

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Object, Source={StaticResource model}, Mode=TwoWay}"> 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Binding="{Binding BoolProperty, mode=TwoWay}"/>     
     </DataGrid.Columns> 
</DataGrid> 

Cuando yo uso una vez DataGridTemplateColumn con una casilla de verificación en el que la propiedad se establece correctamente sin embargo, entonces es más complicado crear un diseño agradable.

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding BoolProperty, Mode=TwoWay}"/>        
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

¿qué estoy haciendo mal uso de la DataGridCheckBoxColumn?

Respuesta

8

En un DataGrid los enlaces no se comprometen hasta que termine la edición de la fila/celda. Si presiona enter, el enlace se aplicará nuevamente a la fuente.

Usando una plantilla como esta anula ese comportamiento, no lo recomendaría sin embargo. Tampoco debe ser necesario establecer TwoWay explícitamente.

+0

Ok gracias en este caso es necesario ya que cuando el usuario marca la casilla Quiero actualizar visualmente algo en el comportamiento la pantalla. ¿Hay alguna forma de hacerlo utilizando DatGridCheckBoxColumn? Además, ¿cuál es la mejor manera para que en el clic inicial el usuario no tenga que hacer clic dos veces para seleccionar la fila y luego la casilla de verificación, puede seleccionar la fila con el evento mouseover? – DanBrum

+0

@DanBrum: no sé si puede eludir esto usando esa columna, podría definir su propia DataGridCheckBoxColumn si no encuentra una manera. La selección en MouseOver debería ser posible. –

37

que tiene el mismo problema con usted, aquí está mi solución

<CheckBox HorizontalAlignment="Center" IsChecked="{Binding BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
+0

Gracias señor, tuve que buscar en la web por un tiempo antes de encontrar esta solución. Funciona genial. – Mash

+2

'' 'TwoWay''' no es necesario ya que es el predeterminado. – Den

31

Mi solución fue establecer UpdateSourceTrigger a PropertyChanged.

<DataGridCheckBoxColumn Header="Bool property" Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"></DataGridCheckBoxColumn> 
+3

Esta es la mejor respuesta. – pennyrave

+0

esta debería ser la respuesta – JobaDiniz

3

Mi solución fue añadir ElementStyle con estilo TargetType = "casilla de verificación":

<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"> 
      <DataGridCheckBoxColumn.ElementStyle> 
       <Style TargetType="CheckBox"/> 
      </DataGridCheckBoxColumn.ElementStyle> 
</DataGridCheckBoxColumn>