DataGrid保存按钮和CanExecute

时间:2011-05-26 05:11:48

标签: c# wpf datagrid save commandbinding

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

如果我在datagrid中添加/删除一行,我应该能够启用“保存”按钮以允许用户保存记录。但是,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 个答案:

答案 0 :(得分:0)

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

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

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

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