如何将删除操作(在WPF Datagrid中)绑定到视图模型中的命令或属性

Sha*_*kar 12 wpf mvvm

我有一个datagrid和一个视图模型,它有一个Obtableable的"Person"类集合,它作为datagrid的ItemSource.

Datagrid有两个文本列"FirstName"和"LastName"

datagrid将"CanUserAddRows"和"CanUserDeleteRows"设置为true.因此,用户可以使用删除按钮添加新行并删除它们.

当用户尝试删除行时,我想验证他是否可以删除该行.如果他可以删除它,它将被删除,否则将显示错误,并且不能删除该行.像我们在relay命令中那样的东西

新的RelayCommand(parm => this.DeletePerson(parm),this.CanDeletePerson(parm)

这可能吗 ?如果是这样的话?

  • 吉里贾

Kor*_*fin 31

尝试将DataGrid设置为...

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

并添加...

<DataGrid.InputBindings>
    <KeyBinding Key="Delete" Command="{Binding DeletePersonCommand}" />
</DataGrid.InputBindings>
Run Code Online (Sandbox Code Playgroud)

将SelectedPerson添加到VM并根据DeletePersonCommand(ICommand)Execute或CanExecute中的SelectedPerson执行删除验证,如果验证通过,则从ObservableCollection中删除该项.

  • 值得注意的是,即使CanUserDelete行为false,网格也会使用删除键,因此您无法将键绑定放在包装元素中. (4认同)
  • 如果您不想要其他绑定,也可以将所选项目作为命令参数传递:`<KeyBinding Key ="Delete"Command ="{Binding DeletePersonCommand}"CommandParameter ="{Binding SelectedItem,RelativeSource = {RelativeSource AncestorType = { x:输入DataGrid}}}"/>` (4认同)