Как связать / добавить обработчик событий в Datagrid MVVM? - PullRequest
0 голосов
/ 04 февраля 2020

Я хочу, чтобы окно сообщения отображалось, когда пользователь нажимает кнопку удаления, чтобы удалить строку в сетке данных в модели MVVM. Я обнаружил, что событие delete может быть перехвачено так:

    <DataGrid CommandManager.PreviewCanExecute="Grid_PreviewCanExecute" />
private void Grid_PreviewCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
  DataGrid grid = (DataGrid)sender;
  if (e.Command == DataGrid.DeleteCommand)
  {
    if (MessageBox.Show(String.Format("Would you like to delete {0}", (grid.SelectedItem as Person).FirstName), "Confirm Delete", MessageBoxButton.OKCancel) != MessageBoxResult.OK)
      e.Handled = true;
  }
}

Я хотел бы спросить, как это сделать в модели mvvm? Спасибо

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Вы можете сделать что-то вроде

сначала связать с ключом

    <Grid>
    .... 
         <DataGrid.InputBindings>
             <KeyBinding  Key="Delete" Command="{Binding DeleteCommand, Mode=OneWay}"  CommandParameter="{Binding Path=SelectedItem, ElementName=yourElementName, Mode=OneWay}"/>
         </DataGrid.InputBindings>
    ....
    </Grid>

секунду, создать команду в вашей модели представления

 public RelayCommand DeleteCommand { get; set; }
 DeleteCommand = new RelayCommand(execute, canExecute);

и теперь вы можете используйте ту же функцию, которую вы написали ранее для canExecute, с некоторыми незначительными изменениями

private void canExecute (object SelectedItem)
{
   if(...)
     return true
   else(...)
     return false 
}

Edit

вы можете использовать библиотеку MVVM, такую ​​как Prism , которая будет сделай свою жизнь намного проще

0 голосов
/ 04 февраля 2020

Вы можете использовать следующий код для выполнения метода, когда происходит указанное событие c (подписка на событие).

yourElement.yourEvent += theMethodToExecute;

Метод, который вы хотите вызвать, должен иметь те же параметры, что и событие «выводы / возвраты».

Event<string> yourEvent; // Event that contains string value

theMethodToExecute(string eventData) {}  // must expect string value

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...