Я применяю шаблон MVVM для Джоша Смита и испытываю трудности. Я изучаю проблему здесь и не могу получить синтаксис совершенно правильно.Проблема синтаксиса лямбда RelayCommand
Код ниже выглядит так, как будто он соответствует требуемому синтаксису, но Visual Studio сообщает об ошибке «Делегат« System.Action »не принимает аргументы« 2 »« в указанной строке.
Может ли кто-нибудь увидеть, где я делаю ошибку? Благодаря!
+ Том
RelayCommand _relayCommand_MoveUp;
public ICommand RelayCommand_MoveUp
{
get
{
if (_relayCommand_MoveUp == null)
{
_relayCommand_MoveUp = new RelayCommand(
(sender, e) => this.Execute_MoveUp(sender, e), **ERROR REPORTED HERE**
(sender, e) => this.CanExecute_MoveUp(sender, e));
return _relayCommand_MoveUp;
}
}
}
private void Execute_MoveUp(object sender, ExecutedRoutedEventArgs e)
{
if (_selectedFolder != null)
{
_selectedFolder.SelectParent();
}
}
private void CanExecute_MoveUp(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (_selectedFolder != null) && (_selectedFolder.Parent != null);
}
//And from Josh Smith:
public class RelayCommand : ICommand
{
public RelayCommand(Action<object> execute);
public RelayCommand(Action<object> execute, Predicate<object> canExecute);
public event EventHandler CanExecuteChanged;
[DebuggerStepThrough]
public bool CanExecute(object parameter);
public void Execute(object parameter);
}
Спасибо, rmoore. Итак, правильно ли я понимаю, что если мне нужно получить доступ к EventArgs в вызываемом методе, я не могу использовать класс RelayCommand для его вызова? + tom –
Правильно, основная ICommand не реализует каких-либо событий, на самом деле, насколько мне известно, RoutedCommand, они на самом деле происходят из чего-то, называемого CommandBinding, и это то, что ищет RoutedCommand. Я добавил некоторую дополнительную информацию для RoutedCommands в MVVM на свой пост, так как в этом комментарии недостаточно места =) – rmoore
Спасибо большое! +10 ... –