2012-02-23 13 views
10

Tengo una cuadrícula de datos y un modelo de vista que tiene una colección Observable de clase "Persona" que sirve como ItemSource para la cuadrícula de datos.Cómo enlazar acción de eliminación (en WPF Datagrid) a un comando o propiedad en el modelo de vista

la cuadrícula de datos tiene dos columnas de texto "Nombre" y "Apellido"

La cuadrícula de datos tiene "CanUserAddRows" y "CanUserDeleteRows" establecidas en true. Entonces, el usuario puede agregar nuevas filas y eliminarlas usando el botón Eliminar.

Cuando el usuario intenta eliminar una fila, quiero validar si puede eliminar eso o no. Si puede eliminarlo, se eliminará, de lo contrario se mostrará el error y no se podrá eliminar la fila. Algo que tenemos al mando del relé

Nueva RelayCommand (Parm => this.DeletePerson (Parm), this.CanDeletePerson (Parm)

es esto posible? Si es así, ¿cómo?

  • Girija

Respuesta

29

intenta configurar el DataGrid a ...

CanUserDeleteRows = "false" Selecte dItem = "{Binding SelectedPerson, Modo = TwoWay}"

y añadiendo ...

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

Añadir SelectedPerson a su VM y realizar su validación de eliminación basado en el SelectedPerson en el DeletePersonCommand (ICommand) Ejecute o CanExecute y elimine el elemento de ObservableCollection si se aprueba la validación.

+4

Vale la pena señalar que la cuadrícula se come la clave de eliminación incluso si CanUserDelete filas es falso, por lo que no puede poner la vinculación en un elemento de ajuste. – DanH

+0

elemento de envoltura? – jpierson

+0

Guau, esta es realmente la solución perfecta, después de vincular la clave a un comando personalizado en mi modelo de vista, funciona perfectamente y evita el código. He visto otras soluciones, ¡pero hasta ahora esta es la mejor! – RainCast

Cuestiones relacionadas