2010-05-28 9 views
8

tengo el estilo siguiente (simplificado):CheckBox personalizado en WPF DataGrid no actualiza la unión

<Style x:Key="MyStyle" TargetType="{x:Type CheckBox}"> 
    <Setter Property="Background" Value="Blue" /> 
</Style> 

Si lo uso como el ElementStyle Y EditingElementStyle en mi DataGridCheckBoxColumn:

<DataGridCheckBoxColumn Binding="{Binding IsEnabled}" 
         ElementStyle="{StaticResource MyStyle}" 
         EditingElementStyle="{StaticResource MyStyle}" /> 

Entonces mi vinculante, IsEnabled, no se activa cuando marque/desmarque la casilla de verificación de una fila. Si elimino ElementStyle, EditingElementStyle o ambos, entonces el enlace no actualiza ningún problema. ¡¿Por qué es esto?!

Además, he tratado de solucionar el problema usando el siguiente código:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding IsEnabled}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Sin embargo, el problema sigue.

Respuesta

11

En primer lugar, su afirmación de que si elimina ElementStyle o EditingElementStyle resuelve el problema no es correcto, lo que le molesta es el ElementStyle.

Lo que pasa es que para la edición que tenga lugar la cuadrícula de datos debe cambiar a la plantilla de edición, lo que lo hace normalmente en un clic del ratón, sin embargo, ya que el CheckBox controla el evento clic del ratón, la cuadrícula de datos no lo consigue , y nunca pasa al modo de edición, evitando que su cambio llegue nunca a sus objetos de datos (permanece dentro de la vista de datos, pero no pasa a los datos de origen).

Ahora usted se estará preguntando, ¿cómo es que el comportamiento predeterminado es correcto? Bueno, si nos fijamos en el valor predeterminado de la propiedad ElementStyle, observará que está configurando IsHitTestVisible y Focusable en false. Esto evita que el CheckBox maneje el clic del mouse (o el evento del teclado) que cambia su estado, y permite que la cuadrícula de datos los reciba, dándole un cambio para ingresar al modo de edición y cambiar al EditingElementStyle que no afecta la capacidad de enfoque y golpea capacidad de prueba.

Salida de este artículo para obtener un ejemplo de cómo hacer esto bien When is a WPF DataGrid read-only CheckBox not read-only?

10

Lo siento por la necro, pero creo que he encontrado una solución mejor aquí en desbordamiento de pila que podrían ayudar a la gente para terminar en esta página de búsqueda para una solución

https://stackoverflow.com/a/7270548/3082531

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <CheckBox IsChecked="{Binding Path=IsSelected, UpdateSourceTrigger=PropertyChanged}" /> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

yo probamos este y funcionó perfectamente para mí, más simple que la solución aceptada y también elimina la necesidad de clics adicionales en las casillas de verificación.

+0

De acuerdo - Esto es muy sencillo. – ifinlay