在Xaml中,说到绑定,我们用的最多的应该就是ICommand了,通过Command实现ViewModel到View之间的命令处理,例如Button默认就提供了Command支持,如下
Xaml:
<Button Content="TestWithCommand" Command="{Binding TestCommand}" />
ViewModel
/// <summary>Provides a base implementation of the <see cref="ICommand"/> interface. </summary> public abstract class CommandBase : ICommand { /// <summary>Gets a value indicating whether the command can execute in its current state. </summary> public abstract bool CanExecute { get; } /// <summary>Defines the method to be called when the command is invoked. </summary> protected abstract void Execute(); /// <summary>Tries to execute the command by checking the <see cref="CanExecute"/> property /// and executes the command only when it can be executed. </summary> /// <returns>True if command has been executed; false otherwise. </returns> public bool TryExecute() { if (!CanExecute) return false; Execute(); return true; } /// <summary>Occurs when changes occur that affect whether or not the command should execute. </summary> public event EventHandler CanExecuteChanged; void ICommand.Execute(object parameter) { Execute(); } bool ICommand.CanExecute(object parameter) { return CanExecute; } } /// <summary>Provides an implementation of the <see cref="ICommand"/> interface. </summary> public class RelayCommand : CommandBase { private readonly Action _execute; private readonly Func<bool> _canExecute; /// <summary>Initializes a new instance of the <see cref="RelayCommand"/> class. </summary> /// <param name="execute">The action to execute. </param> public RelayCommand(Action execute) : this(execute, null) { } /// <summary>Initializes a new instance of the <see cref="RelayCommand"/> class. </summary> /// <param name="execute">The action to execute. </param> /// <param name="canExecute">The predicate to check whether the function can be executed. </param> public RelayCommand(Action execute, Func<bool> canExecute) { if (execute == null) throw new ArgumentNullException(nameof(execute)); _execute = execute; _canExecute = canExecute; } /// <summary>Defines the method to be called when the command is invoked. </summary> protected override void Execute() { _execute(); } /// <summary>Gets a value indicating whether the command can execute in its current state. </summary> public override bool CanExecute => _canExecute == null || _canExecute(); }