RelayCommand CanExecute не работает, когда параметр передается с asyn c lambda - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть следующая команда, которая работает:

private ICommand _AddNewCommand;
public ICommand AddNewCommand
{
    get
    {
        if (_AddNewCommand == null)
        {
            _AddNewCommand = new RelayCommand(async () =>
                                              {
                                                  await AddNewAsync();
                                              }, AddNewCommand_CanExecute);
        }
        return _AddNewCommand;
    }
}

Связанная с этим кнопка правильно включена / отключена в соответствии с результатом метода AddNewCommand_CanExecute.

Однако, если я хочу чтобы передать некоторый параметр в мой AddNewAsync() метод, я делаю это:

 _AddNewCommand = new RelayCommand<object>(async obj =>
                                          {
                                              await AddNewAsync(obj);
                                          }, AddNewCommand_CanExecute());

Обратите внимание, что AddNewCommand_CanExecute необходимо изменить на AddNewCommand_CanExecute().

Однако, когда я это делаю, связанная кнопка всегда включена, даже если AddNewCommand_CanExecute() должен возвращать false (учитывая, что она не изменилась между двумя).

Что здесь происходит?

1 Ответ

1 голос
/ 03 апреля 2020

Вы используете перегрузку RelayCommand<T>, которая принимает параметр keepTargetAlive типа bool.

Вы должны использовать тот, который принимает предикат Func<T, bool>:

_AddNewCommand = new RelayCommand<object>(async obj =>
{
    await AddNewAsync(obj);
}, _ => AddNewCommand_CanExecute());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...