DataGrid 保存按钮和 CanExecute

Posted

技术标签:

【中文标题】DataGrid 保存按钮和 CanExecute【英文标题】:DataGrid save button and CanExecute 【发布时间】:2011-05-26 05:11:47 【问题描述】:

我在 XAML 中有一个数据网格和保存按钮。我有一个绑定到数据网格的 ObservableCollection。

如果我在数据网格中添加/删除一行,我应该能够启用“保存”按钮以允许用户保存记录。但是 ObservableCollection 的 NotifyCollectionChangedAction 无法捕捉到“编辑”(即值更改)。所以我想在调用datagrid的currentcellchanged事件时手动启用保存按钮(即设置e.CanExecute = true)。

由于您不能像在 WinForms 中那样设置 enable=true,因此 WPF 具有此 CanExecute 和 Executed 命令绑定。

在我的 XAML 中:

</UserControl.Resources>

    <UserControl.CommandBindings>

            <CommandBinding Command="Save" Executed="Save_Executed" CanExecute="Save_CanExecute">
            </CommandBinding>

    </UserControl.CommandBindings>

 <Button Grid.Row="4" Content="Save" Command="Save" HorizontalAlignment="Right" Margin="5" Name="saveButton" VerticalAlignment="Center" Width="75" >

代码:

private void Save_Executed(object sender, ExecutedRoutedEventArgs e)
        

        
 private void Save_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        
            e.CanExecute = businessContractorViewModel != null && businessContractorViewModel.Entry != null;
        

 private void businessDataGrid_CurrentCellChanged(object sender, EventArgs e)
        
//?? how to set savebutton e.canexecute = true?

        

【问题讨论】:

【参考方案1】:

我添加了一个触发器,当我完成编辑单元格时,设置 bool Edited= true 并回发,保存按钮将捕获更改并将其自身设置为启用。

我不知道它是否是最好的,但它对我有用。

private void Save_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        
            e.CanExecute = Edited;
        

 private void businessDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        
            Edited = true;
        

【讨论】:

以上是关于DataGrid 保存按钮和 CanExecute的主要内容,如果未能解决你的问题,请参考以下文章

当命令 CanExecute 为 false 时,按钮不会被禁用

MVVM RelayCommand可以执行

WPF CommandParameter 在第一次调用 CanExecute 时为 NULL

WPF 的命令的自动刷新时机——当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因

WPF MVVM Command CanExecute,仅在焦点更改时重新评估

如何在 WPF 中使用 ICommand 中的 CanExecute 方法