2011-09-12 12 views
7

Desidero proteggere alcune righe di un DataGrid da proteggere dall'eliminazione da parte dell'utente, sebbene la proprietà sia impostata su true.Previene la cancellazione della riga DataGrid

Esiste la possibilità di proteggere alcune righe, si spera tramite un collegamento dati o un trigger? ItemsSource è associato a una ObservableCollection di T.

risposta

13

Se si dispone di una proprietà sugli oggetti associati che è possibile utilizzare per determinare se è possibile eliminare la riga corrente, ad esempio "IsDeleteEnabled", è possibile associare la proprietà CanUserDeleteRows di DataGrid a SelectedItem.IsDeleteEnabled.

Per esempio,

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

+1 Buona idea, ma funzionerà solo se la selezione multipla è disabilitata. Verificherò se funziona, perché penso che sia una buona soluzione, ma dipende dalla selezione multipla e per questo non funzionerà. – HCL

0

Non eseguito mai con un DataGrid. Di solito, quando ho bisogno di controllare qualcosa di simile, uso un ListBox e un DataTemplate con una Griglia all'interno per dargli l'idea di una Grid o di una ListView con una GridView nel modello perché entrambi ti danno un maggiore controllo sull'interazione.

Un colpo al buio, poiché si sta vincolando, è possibile utilizzare un DataGridTemplateColumn.CellEditingTemplate e creare il proprio pulsante Elimina/testo che è visibile o abilitato basato sulla logica all'interno dell'oggetto di rilegatura. Forse qualcosa di simile (non ho provato questo, ma dovrebbe essere una direzione che puoi dirigere)?

<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> 

Utilizzando questo metodo, dal momento che il comando è legato al singolo oggetto, si sarebbe probabilmente dovuto alzare un evento ViewModel del vostro schermo maniglie per rimuovere quella riga dal ObservableCollection.

Anche in questo caso, non sono sicuro se questo è il modo migliore, ma è il mio tentativo di 10 minuti. Quindi se è orribile, per favore non votarmi troppo.

+0

Il mio interesse per questa domanda è, se v'è la possibilità di farlo con le caratteristiche di eliminazione integrati del DataGrid senza implementare la mia gestione eliminazione. Ma grazie comunque per la tua risposta. – HCL

Problemi correlati