Den Pfad zu MVVM weitergehend, bin ich zu Tastenbefehlen gekommen. Nach einigem Hin und Her habe ich endlich ein funktionierendes Beispiel für einen Button_Click
Befehl mit ICommand
.Wie erkennt man, auf welche Schaltfläche geklickt wurde? (MVVM)
Mein Problem ist, dass ich jetzt ein generisches Ereignis gemacht habe, ich kann nicht bekommen, welcher Knopf geklickt wurde, um etwas Logik darauf anzuwenden. In meinem Beispiel habe ich nichts verwendet, wo ich die Sender
Information bekommen konnte. Normalerweise so etwas wie dies unter Verwendung RoutedEventArgs
:
Button button = (Button)sender;
So ist das, was ich bis jetzt haben.
Die ICommand
Klasse:
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();
}
}
Und der Code die Aktion zu machen:
private ICommand _clickCommand;
public ICommand ClickCommand => _clickCommand ?? (_clickCommand = new CommandHandler(MyAction, _canExecute));
public ViewModelBase()
{
_canExecute = true;
}
public void MyAction()
{
//Apply logic here to differentiate each button
}
Und das XAML,
<Button Command="{Binding ClickCommand}" Style="{StaticResource RedButtonStyle}">MyButton</Button>
Wie würde ich mich über die Identifizierung, welche Taste ist wird geklickt, wenn derselbe Befehl an andere Schaltflächen gebunden wird?
Nur neugierig, warum nicht nur * 2 * ICommands verwenden? –
@XanderLuciano, ich dachte nur, einige Kriterien zu verwenden, die Tasten in der Methode zu unterscheiden war der Weg, es zu tun. Prost – KyloRen
Fair genug! Ich habe gerade mit MVVM vor ungefähr einem Monat begonnen, also verstehe ich den Kampf damit, dein Denken anpassen zu müssen. Viel Glück! –