2011-09-12 12 views
7

Quiero proteger algunas filas de un DataGrid para que el usuario las proteja de la eliminación, aunque la propiedad CanUserDeleteRows está configurada en true.Evitar que se borre la fila de DataGrid

¿Existe la posibilidad de proteger algunas filas, con suerte mediante un enlace de datos o un activador? The ItemsSource está vinculado a una ObservableCollection de T.

Respuesta

13

Si tiene una propiedad en sus objetos enlazados que se puede usar para determinar si la fila actual se puede eliminar, como 'IsDeleteEnabled', puede vincular la propiedad CanUserDeleteRows de DataGrid a SelectedItem.IsDeleteEnabled.

Por ejemplo,

<DataGrid Name="dataGrid1" 
     CanUserDeleteRows="{Binding ElementName=dataGrid1, Path=SelectedItem.IsDeleteEnabled}" 
+1

+1 Buena idea, pero solo funcionará si la selección múltiple está desactivada. Voy a probar si funciona porque creo que es una buena solución, pero dependo de la selección múltiple y para esto no funcionará. – HCL

0

Nunca se hizo esto con un DataGrid. Usualmente, cuando necesito controlar algo como esto, utilizo un ListBox y una DataTemplate con una grilla dentro para darle la idea de una grilla o una vista de lista con una grilla en la plantilla porque ambas le dan más control sobre la interacción.

Un tiro en la oscuridad, ya que es vinculante, puede utilizar un DataGridTemplateColumn.CellEditingTemplate y crear su propio botón/texto Eliminar que está visible o habilitado en función de la lógica dentro de su objeto vinculante. Tal vez algo como esto (no probé esto, pero debería ser una dirección a la que puedes ir)

<dg:DataGridTemplateColumn Header="Action"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Text Content="Delete" /> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 

    <dg:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ButtonEnabled="{Binding Path=IsDeleteEnabled, Mode=OneWay}" Content="Delete" Command="{Binding Path=DeleteMe}" /> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellEditingTemplate> 
</dg:DataGridTemplateColumn> 

Usando este método, ya que el comando está ligado al objeto individual, es probable que tenga que generar un evento modelo de vista de su pantalla se encarga de eliminar esa fila de la ObservableCollection.

De nuevo, no estoy seguro si esta es la mejor manera, pero es mi puñalada de 10 minutos. Entonces, si es horrible, por favor no me vote demasiado.

+0

Mi interés en esta pregunta es, si existe la posibilidad de hacerlo con las características de eliminación integrados de la cuadrícula de datos sin tener que implementar un manejo mi propia eliminación. Pero gracias de todos modos por tu respuesta. – HCL

Cuestiones relacionadas