Кнопка сохранения DataGrid и CanExecute

У меня есть сетка данных и кнопка сохранения в XAML. У меня есть ObservableCollection, привязанный к сетке данных.

Если я добавлю/удалю строку в сетке данных, я смогу включить кнопку «Сохранить», чтобы пользователь мог сохранять записи. Однако NotifyCollectionChangedAction ObservableCollection не может уловить «редактирование» (т.е. изменение значения). Поэтому я хочу вручную включить кнопку сохранения при вызове события currentcellchanged сетки данных (т.е. установить e.CanExecute = true).

Поскольку вы не можете установить enable=true, как в WinForms, 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?

        }

person Kiddo    schedule 26.05.2011    source источник


Ответы (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;
        }
person Kiddo    schedule 26.05.2011