silverlight datagrid

¿Los eventos Silverlight DataGrid Checkbox son?



(1)

El tipo DataGridCheckBoxColumn no proporciona actualmente un evento Click, de hecho, actualmente no proporciona ningún evento. Una celda presentada en una columna de este tipo solo implementa un enlace TwoWay entre la propiedad IsChecked de un control CheckBox y la propiedad (especificada en el enlace) en la instancia de T en la fila actual de ObservableCollection <T> que DataGrid es obligado a.

Usted no proporciona su Xaml, así que usaré el ejemplo de la publicación de mi blog a la que se hace referencia en su pregunta. La solución implica especificar una DataGridTemplateColumn que contiene un CheckBox y definir el evento Click de la siguiente manera:

<data:DataGrid x:Name="FilteredPeople" AutoGenerateColumns="False"> <data:DataGrid.Columns> <data:DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" /> <data:DataGridTextColumn Header="Age" Binding="{Binding Age}" /> <data:DataGridCheckBoxColumn Header="Visible" Binding="{Binding IsVisible}" /> <data:DataGridTemplateColumn Header="Row Filter"> <data:DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox x:Name="RowFilterButton" IsChecked="{Binding IsVisible}" Content="Filter" Tag="{Binding}" Click="RowFilterButton_Click" /> </DataTemplate> </data:DataGridTemplateColumn.CellTemplate> </data:DataGridTemplateColumn> </data:DataGrid.Columns> </data:DataGrid>

Una alternativa a un CheckBox en este caso podría ser un control de botón ToggleButton o normal. Observe el enlace de la propiedad Tag de CheckBox. Esto ayuda a averiguar en qué fila se hizo clic en el CheckBox desde el código subyacente:

private void RowFilterButton_Click(object sender, RoutedEventArgs e) { Person person = ((CheckBox)sender).Tag as Person; }

A continuación, puede eliminar a esta persona del ObservableCollection <T> o cambiar sus propiedades para filtrar o actualizar el DataGrid, según corresponda.

Normalmente, esta respuesta finalizaría, pero si no tiene instalada esta actualización, hay un error en la versión del SDK predeterminado de Silverlight 2 DataGrid que impide esto. En este caso, el error se manifestará por el DataGrid que no dibuja la fila en la que está el CheckBox (en cambio, lo que obtienes parece una fila invisible) si haces que DataGrid se filtre cuando haces clic en ese CheckBox (es decir, el recuadro tiene foco) .

Para evitar este error, instale la actualización o inicie cualquier manipulación del ObservableCollection <T> al que DataGrid está vinculado desde un Control fuera de las filas del DataGrid como se muestra en este ejemplo .

¿Es posible tener un enlace DataGridCheckBoxColumn llamado a un método de clic? ¿O evento un nivel de fila o fila ingrese el evento?

Estoy intentando implementar una cuadrícula de datos que actualice la colección subyacente filtrada de ObservableCollection (muy similar aquí http://petermcg.wordpress.com/2009/01/29/filtering-silverlight-datagrid-rows/ )

El filtrado funciona bien si presiono un botón de actualización u otro método externo. Pero, parece que no puedo encontrar ningún evento interno de cuadrícula ni nada en el DataGridCheckBoxColumn que me permita llamar a la lógica del filtro de actualización.

¿Alguna sugerencia sobre cómo implementar una cuadrícula de datos que actualice la colección subyacente al presionar una casilla de verificación?

Por favor, encuentra debajo de mi Xaml, realmente no es nada especial.