Ich verwende das MVVM-Muster pro Josh Smith und Schwierigkeiten haben. Ich habe das Problem hier untersucht und kann die Syntax nicht ganz richtig finden.RelayCommand Lambda Syntax Problem
Der folgende Code sieht für mich aus, als ob es die erforderliche Syntax folgt, aber Visual Studio meldet Fehler "Delegate 'System.Action' nicht '2' Argumente" auf der angegebenen Zeile.
Kann jemand sehen, wo ich einen Fehler mache? Vielen Dank!
+ 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);
}
Danke, rmoore:
Um einen Parameter an den Delegaten übergeben, werden Sie seine neue RelayCommand <T> Konstruktor stattdessen verwenden müssen. Also, verstehe ich richtig, wenn ich auf die EventArgs innerhalb der aufgerufenen Methode zugreifen muss, kann ich die RelayCommand-Klasse nicht verwenden, um sie aufzurufen? + tom –
Das ist korrekt, das grundlegende ICommand implementiert keine Ereignisse, in der Tat weder nach meinem Wissen der RoutedCommand, die tatsächlich kommen aus etwas, das ein CommandBinding genannt wird, wonach der RoutedCommand sucht. Ich habe einige zusätzliche Informationen für RoutedCommands in MVVM zu meinem Post hinzugefügt, da in diesem Kommentar nicht genug Platz ist =) – rmoore
Vielen Dank! +10 ... –