Relay Command in windows 8 windows store app

后端 未结 3 656
刺人心
刺人心 2021-02-15 23:07

Is there a version of RelayCommand, since CommandManager is not available in win8 metro apps?

相关标签:
3条回答
  • 2021-02-15 23:51

    Prism for Windows Store apps is now available, which contains DelegateCommand (Which implements ICommand), as well as an implemention of OnPropertyChanged.

    0 讨论(0)
  • 2021-02-15 23:53

    There is no implementation if ICommand provided in Metro, although there are several versions available, such as this one on CodeProject.

    0 讨论(0)
  • 2021-02-15 23:56

    There is a version here.

    using System;
    using System.Diagnostics;
    
    #if METRO
    using Windows.UI.Xaml.Input;
    using System.Windows.Input;
    #else
    using System.Windows.Input;
    #endif
    
    namespace MyToolkit.MVVM
    {
    #if METRO
        public class RelayCommand : NotifyPropertyChanged, ICommand
    #else
        public class RelayCommand : NotifyPropertyChanged<RelayCommand>, ICommand
    #endif
        {
            private readonly Action execute;
            private readonly Func<bool> canExecute;
    
            public RelayCommand(Action execute)
                : this(execute, null) { }
    
            public RelayCommand(Action execute, Func<bool> canExecute)
            {
                if (execute == null)
                    throw new ArgumentNullException("execute");
    
                this.execute = execute;
                this.canExecute = canExecute;
            }
    
            bool ICommand.CanExecute(object parameter)
            {
                return CanExecute;
            }
    
            public void Execute(object parameter)
            {
                execute();
            }
    
            public bool CanExecute 
            {
                get { return canExecute == null || canExecute(); }
            }
    
            public void RaiseCanExecuteChanged()
            {
                RaisePropertyChanged("CanExecute");
                if (CanExecuteChanged != null)
                    CanExecuteChanged(this, new EventArgs());
            }
    
            public event EventHandler CanExecuteChanged;
        }
    
        public class RelayCommand<T> : ICommand
        {
            private readonly Action<T> execute;
            private readonly Predicate<T> canExecute;
    
            public RelayCommand(Action<T> execute)
                : this(execute, null)
            {
            }
    
            public RelayCommand(Action<T> execute, Predicate<T> canExecute)
            {
                if (execute == null)
                    throw new ArgumentNullException("execute");
    
                this.execute = execute;
                this.canExecute = canExecute;
            }
    
            [DebuggerStepThrough]
            public bool CanExecute(object parameter)
            {
                return canExecute == null || canExecute((T)parameter);
            }
    
            public void Execute(object parameter)
            {
                execute((T)parameter);
            }
    
            public void RaiseCanExecuteChanged()
            {
                if (CanExecuteChanged != null)
                    CanExecuteChanged(this, new EventArgs());
            }
    
            public event EventHandler CanExecuteChanged;
        } 
    }
    
    0 讨论(0)
提交回复
热议问题