J'applique le modèle MVVM par Josh Smith et j'ai de la difficulté. J'ai recherché le problème ici et ne peux pas sembler avoir la syntaxe tout à fait raison.RelayCommand problème de syntaxe lambda
Le code ci-dessous ressemble à moi comme il suit la syntaxe requise, mais les rapports Visual Studio erreur « délégué « System.Action » ne prend pas d'arguments « 2 » » sur la ligne indiquée.
Quelqu'un peut-il voir où je fais une erreur? Merci!
+ tom
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);
}
Merci, rmoore. Alors, est-ce que je comprends bien que si j'ai besoin d'accéder à EventArgs dans la méthode appelée, je ne peux pas utiliser la classe RelayCommand pour l'appeler? + tom –
C'est vrai, l'ICommand de base n'implémente aucun évènement, en fait, ni à ma connaissance le RoutedCommand, ceux-ci viennent réellement de quelque chose appelé CommandBinding, ce que recherche la RoutedCommand. J'ai ajouté quelques informations supplémentaires pour RoutedCommands dans MVVM à mon poste, car il n'y a pas assez de place dans ce commentaire =) – rmoore
Merci beaucoup! +10 ... –