Übergabe von Parametern an MVVM-Befehl
Wer weiß, wie Parameter übergeben Command
mit CommandHandler
? Nehmen wir an, ich würde gerne weitergeben string hart codierten Wert von XAML. Ich weiß, wie ich pass von XAML, aber nicht zu behandeln, wie es in MVVM-code. Der code unten funktioniert gut, wenn es müssen keine Parameter übergeben.
public ICommand AttachmentChecked
{
get
{
return _attachmentChecked ?? (_attachmentChecked = new CommandHandler(() => ExecuteAttachmentChecked(), CanExecuteAttachmentChecked()));
}
}
private void ExecuteAttachmentChecked()
{
}
private bool CanExecuteAttachmentChecked()
{
return true;
}
CommandHandler:
public class CommandHandler : ICommand
{
private Action _action;
private bool _canExecute;
public CommandHandler(Action action, bool canExecute)
{
_action = action;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
_action();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zwei Dinge geändert
Sollten Sie schreiben Sie einfach Ihren Text in CommandParameter:
und ändern von:
zu ermöglichen, die Parameter akzeptieren:
Davon aus, dass du mit
RelayCommand
im parameterobj
MethodeDoSmth
wird "Hallo":Dies hat bereits beantwortet, aber Sie können nicht wissen, dass es einige Frameworks, um zu vermeiden, zu boilerplate code für Befehle (und INotifyPropertyChanged) in MVVM.
Einer der bekanntesten ist MVVM Light umgehen ein paar Dinge für Sie.
Mit diesem Rahmen, ist dies wie behandeln Sie einen Befehl mit den Parametern :
(Hinweis : Wir gehen, um einen Befehl zu erstellen, die verändert, UserControl angezeigt, da die UserControl ist der "Hauptbereich" der Applikation)
1) In der ViewModel definieren Sie ein RelayCommand mit dem Typ des Arguments (in diesem Fall ein UserControl)
2) Definieren Sie die Methode zu sein, gebunden an den Befehl (hier vereinfacht)
3) Binden Sie Ihren Befehl, um die Methode, die Sie gerade definiert
Dein Befehl ist jetzt alles eingerichtet und bereit für den Einsatz in Ihrem XAML, lassen Sie uns sagen, Sie wollen wechseln Seite mit menüauswahlen zum Beispiel...
4) - Bindung-Befehl mit dem parameter-Steuerelemente (XAML)
Hinweis : der pageManager ist einfach eine Klasse, initialisiert alle meine Seiten in den Standard-Zustand, es ist offensichtlich eine Referenz auf ihn in meinem ViewModel.
Hoffe das hilft dir oder jemand vorbei
Parameter übergeben wird, in der
ICommand.Execute
Methode, die Sie gerade brauchen, um passieren Sie es durch Ihre Ereignishandler.