我有一个 wpf 特定的问题。我试图从 Datagrid 中删除一行,方法是定义一个键绑定(bind),该键绑定(bind)将 Datagrid 的选定行作为命令参数传递给命令。

这是我的键绑定(bind):

<UserControl.Resources >
    <Commands:CommandReference x:Key="deleteKey" Command="{Binding DeleteSelectedCommand}"/>
</UserControl.Resources>

<UserControl.InputBindings>
    <KeyBinding Key="D" Modifiers="Control" Command="{StaticResource deleteKey}"/>
</UserControl.InputBindings>

我知道这基本上有效,因为我可以调试到 DeleteSelectedCommand。但是,会出现异常,因为 DeleteSelectedCommand 期望将 Datagrid 的一行作为调用参数删除。

如何通过键绑定(bind)传递 SelectedRow?

如果可能,我只想在 XAML 中执行此操作,而不更改隐藏代码。

最佳答案

与其尝试使用命令参数,不如创建一个属性来存储所选行:

private Model row;

 public Model Row
     {
         get { return row; }
         set
         {
             if (row != value)
             {
                 row = value;
                 base.RaisePropertyChanged("Row");
             }
         }
     }

其中 Model 是您的网格显示的对象的类。
在数据网格上添加 selectedItem 属性以使用该属性:
<DataGrid SelectedItem="{Binding Row, UpdateSourceTrigger=PropertyChanged}"/>

然后让您的命令通过行传递给方法:
    public ICommand DeleteSelectedCommand
     {
         get
         {
             return new RelayCommand<string>((s) => DeleteRow(Row));
         }
     }

以及您的按键绑定(bind):
 <DataGrid.InputBindings>
            <KeyBinding Key="Delete" Command="{Binding DeleteSelectedCommand}" />
        </DataGrid.InputBindings>

希望有帮助!

关于wpf - 通过键绑定(bind)从 Datagrid 传递命令参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8213105/

10-10 09:30