Чтобы обработать пользовательский щелчок по кнопке, мы можем либо использовать обработчик нажатия кнопок для выполнения внутренней логики, либо мы можем использовать команды для достижения того же.
Зачем нужны команды, если этого можно добиться с помощью обработчика событий нажатия кнопки?
- Его лучше использовать при использовании шаблона проектирования MVVM.
- Когда есть несколько кнопок, вместо того, чтобы иметь внутреннюю логику для каждого нажатия кнопки отдельно, мы можем использовать одну и ту же команду и реализовать разные действия для разных кнопок, используя параметры команды.
Реализация
Создайте собственный класс, реализующий ICommand.
public class DelegateCommand<T> : ICommand
{
private readonly Predicate<T> _canExecuteMethod;
private readonly Action<T> _action;
public DelegateCommand(Action<T> execute)
: this(execute, null)
{
_action = execute;
}
public DelegateCommand(Action<T> execute, Predicate<T> canExecute)
{
_action = execute;
_canExecuteMethod = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecuteMethod == null || _canExecuteMethod((T)parameter);
}
public void Execute(object parameter)
{
_action((T)parameter);
}
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
}
В вашем файле xaml кнопка должна иметь определенное свойство команды,
<Button Command=”{Binding MyCommand}” CommandParameter=”closeButton” VerticalContentAlignment=”Top” HorizontalContentAlignment=”Left” Width=”80" Height=”70"></Button>
<Button Command=”{Binding MyCommand}” CommandParameter=”minButton” VerticalContentAlignment=”Top” HorizontalContentAlignment=”Left” Width=”80" Height=”70"></Button>
Затем мы можем использовать DelegateCommand, который мы создали, чтобы прослушивать нажатия кнопок в нашем классе ViewModel, как показано ниже:
class XViewModel
{
public DelegateCommand<string> MyCommand { get; set; }
public XViewModel()
{
this.MyCommand = new DelegateCommand<string>(PostButtonClick);
}
public void PostButtonClick(string command)
{
if(command == closeButton){ // logic here}
if(command == minButton){ // logic here}
}
}
Надеюсь, это поможет, спасибо за чтение.