Last active
August 29, 2015 14:05
-
-
Save dubeme/b4f2e0f53d719a2d8b70 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// A command whose sole purpose is to relay its functionality | |
/// to other objects by invoking delegates. | |
/// The default return value for the CanExecute method is 'true'. | |
/// <see cref="RaiseCanExecuteChanged"/> needs to be called whenever | |
/// <see cref="CanExecute"/> is expected to return a different value. | |
/// </summary> | |
public class RelayCommand : ICommand | |
{ | |
private readonly Action _execute; | |
private readonly Func<bool> _canExecute; | |
/// <summary> | |
/// Raised when RaiseCanExecuteChanged is called. | |
/// </summary> | |
public event EventHandler CanExecuteChanged; | |
/// <summary> | |
/// Creates a new command that can always execute. | |
/// </summary> | |
/// <param name="execute">The execution logic.</param> | |
public RelayCommand(Action execute) | |
: this(execute, null) | |
{ | |
} | |
/// <summary> | |
/// Creates a new command. | |
/// </summary> | |
/// <param name="execute">The execution logic.</param> | |
/// <param name="canExecute">The execution status logic.</param> | |
public RelayCommand(Action execute, Func<bool> canExecute) | |
{ | |
if (execute == null) | |
throw new ArgumentNullException("execute"); | |
_execute = execute; | |
_canExecute = canExecute; | |
} | |
/// <summary> | |
/// Determines whether this <see cref="RelayCommand"/> can execute in its current state. | |
/// </summary> | |
/// <param name="parameter"> | |
/// Data used by the command. If the command does not require data to be passed, this object can be set to null. | |
/// </param> | |
/// <returns>true if this command can be executed; otherwise, false.</returns> | |
public bool CanExecute(object parameter) | |
{ | |
return _canExecute == null ? true : _canExecute(); | |
} | |
/// <summary> | |
/// Executes the <see cref="RelayCommand"/> on the current command target. | |
/// </summary> | |
/// <param name="parameter"> | |
/// Data used by the command. If the command does not require data to be passed, this object can be set to null. | |
/// </param> | |
public void Execute(object parameter) | |
{ | |
_execute(); | |
} | |
/// <summary> | |
/// Method used to raise the <see cref="CanExecuteChanged"/> event | |
/// to indicate that the return value of the <see cref="CanExecute"/> | |
/// method has changed. | |
/// </summary> | |
public void RaiseCanExecuteChanged() | |
{ | |
var handler = CanExecuteChanged; | |
if (handler != null) | |
{ | |
handler(this, EventArgs.Empty); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment