Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to bind delete action (in WPF Datagrid) to a command or property in view model

Tags:

mvvm

wpf

I have a datagrid and a view model that has an Observable collection of "Person" class which serves as ItemSource for the datagrid.

The Datagrid has two text columns "FirstName" and "LastName"

The datagrid has "CanUserAddRows" and "CanUserDeleteRows" set to true. So the user can add new rows and delete them by using the delete button.

When the user tries to delete a row, i want to validate if he can delete that or not. If he can delete it it will be deleted else the error will be shown and the row cannot be deleted. Something like we have in relay command

New RelayCommand(parm => this.DeletePerson(parm),this.CanDeletePerson(parm)

Is this possible ? If so how ?

  • Girija
like image 707
Shankar Avatar asked Feb 23 '12 12:02

Shankar


1 Answers

Try setting your DataGrid to ...

CanUserDeleteRows="False" SelectedItem="{Binding SelectedPerson, Mode=TwoWay}"

and adding ...

<DataGrid.InputBindings>
    <KeyBinding Key="Delete" Command="{Binding DeletePersonCommand}" />
</DataGrid.InputBindings>

Add SelectedPerson to your VM and perform your delete validation based on the SelectedPerson in the DeletePersonCommand (ICommand) Execute or CanExecute and remove the item from the ObservableCollection if validation passes.

like image 120
KornMuffin Avatar answered Sep 28 '22 16:09

KornMuffin