summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core/Command.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Core/Command.cs')
-rw-r--r--Xamarin.Forms.Core/Command.cs80
1 files changed, 80 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core/Command.cs b/Xamarin.Forms.Core/Command.cs
new file mode 100644
index 00000000..73ae1b08
--- /dev/null
+++ b/Xamarin.Forms.Core/Command.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Windows.Input;
+
+namespace Xamarin.Forms
+{
+ public sealed class Command<T> : Command
+ {
+ public Command(Action<T> execute) : base(o => execute((T)o))
+ {
+ if (execute == null)
+ throw new ArgumentNullException("execute");
+ }
+
+ public Command(Action<T> execute, Func<T, bool> canExecute) : base(o => execute((T)o), o => canExecute((T)o))
+ {
+ if (execute == null)
+ throw new ArgumentNullException("execute");
+ if (canExecute == null)
+ throw new ArgumentNullException("canExecute");
+ }
+ }
+
+ public class Command : ICommand
+ {
+ readonly Func<object, bool> _canExecute;
+ readonly Action<object> _execute;
+
+ public Command(Action<object> execute)
+ {
+ if (execute == null)
+ throw new ArgumentNullException("execute");
+
+ _execute = execute;
+ }
+
+ public Command(Action execute) : this(o => execute())
+ {
+ if (execute == null)
+ throw new ArgumentNullException("execute");
+ }
+
+ public Command(Action<object> execute, Func<object, bool> canExecute) : this(execute)
+ {
+ if (canExecute == null)
+ throw new ArgumentNullException("canExecute");
+
+ _canExecute = canExecute;
+ }
+
+ public Command(Action execute, Func<bool> canExecute) : this(o => execute(), o => canExecute())
+ {
+ if (execute == null)
+ throw new ArgumentNullException("execute");
+ if (canExecute == null)
+ throw new ArgumentNullException("canExecute");
+ }
+
+ public bool CanExecute(object parameter)
+ {
+ if (_canExecute != null)
+ return _canExecute(parameter);
+
+ return true;
+ }
+
+ public event EventHandler CanExecuteChanged;
+
+ public void Execute(object parameter)
+ {
+ _execute(parameter);
+ }
+
+ public void ChangeCanExecute()
+ {
+ EventHandler changed = CanExecuteChanged;
+ if (changed != null)
+ changed(this, EventArgs.Empty);
+ }
+ }
+} \ No newline at end of file