프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

markus / MarkusAutoUpdate / src / NetSparkle.UI.WPF / Helpers / RelayCommand.cs @ d8f5045e

이력 | 보기 | 이력해설 | 다운로드 (1.67 KB)

1
using System;
2
using System.Collections.Generic;
3
using System.Diagnostics;
4
using System.Linq;
5
using System.Text;
6
using System.Threading.Tasks;
7
using System.Windows.Input;
8

    
9
namespace WPFTemplate.Helpers
10
{
11
    // https://gist.github.com/schuster-rainer/2648922 with some modifications
12
    public class RelayCommand<T> : ICommand
13
    {
14
        #region Fields
15

    
16
        readonly Action<T> _execute;
17
        readonly Predicate<T> _canExecute;
18

    
19
        #endregion
20

    
21
        #region Constructors
22

    
23
        public RelayCommand(Action<T> execute)
24
        : this(execute, null)
25
        {
26
        }
27

    
28
        public RelayCommand(Action<T> execute, Predicate<T> canExecute)
29
        {
30
            if (execute == null)
31
                throw new ArgumentNullException("Execute parameter cannot be null");
32
            _execute = execute;
33
            _canExecute = canExecute;
34
        }
35

    
36
        #endregion
37

    
38
        #region ICommand Members
39

    
40
        [DebuggerStepThrough]
41
        public bool CanExecute(object parameter)
42
        {
43
            return _canExecute == null ? true : _canExecute((T)parameter);
44
        }
45

    
46
        public event EventHandler CanExecuteChanged
47
        {
48
            add { CommandManager.RequerySuggested += value; }
49
            remove { CommandManager.RequerySuggested -= value; }
50
        }
51

    
52
        public void Execute(object parameter) => _execute((T)parameter);
53

    
54
        #endregion
55
    }
56

    
57
    public class RelayCommand : RelayCommand<object>
58
    {
59
        public RelayCommand(Action execute) : this(execute, null) { }
60
        public RelayCommand(Action execute, Func<bool> canExecute)
61
            : base(param => execute?.Invoke(),
62
                   param => (canExecute?.Invoke()) ?? true) { }
63
    }
64
}
클립보드 이미지 추가 (최대 크기: 500 MB)