• 菲佣的WPF——1


    所有外包程序员都是菲佣

    这个开头自娱自乐。今天就发我自己写的WPF DeletegateCommand 类。用于ICommnad的实现

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Input;
    
    namespace WpfApplication4
    {
        public class DeletegateCommand : ICommand
        {
            #region << Field >>
            private readonly Action<object> excute;
            private readonly Func<object, bool> canExcute;
            #endregion
    
            #region << Constructor >>
            public DeletegateCommand(Action excute)
                : this((o)=>excute(),(o)=>true)
            { }
    
            public DeletegateCommand(Action excute, Func<bool> canExcute)
                : this((o) => excute(), (o) => canExcute())
            { }
    
            public DeletegateCommand(Action<object> excute)
                : this(excute, (o) => true)
            { }
    
            public DeletegateCommand(Action<object> excute, Func<bool> canExcute)
                : this(excute, (o) => canExcute())
            { }
    
            public DeletegateCommand(Action<object> excute, Func<object, bool> canExcute)
            {
                this.excute = excute;
                this.canExcute = canExcute;
            }
            #endregion
    
            #region << Method >>
            public bool CanExecute(object parameter)
            {
                return canExcute(parameter);
            }
    
            public event EventHandler CanExecuteChanged
            {
                add
                {
                    CommandManager.RequerySuggested += value;
                }
                remove
                {
                    CommandManager.RequerySuggested -= value;
                }
            }
    
            public void Execute(object parameter)
            {
                excute(parameter);
            }
            #endregion
        }
    
        public class DeletegateCommand<T> : DeletegateCommand
        {
            #region << Constructor >>
            public DeletegateCommand(Action<T> excute)
                : this(excute, (o) => true)
            { }
    
            public DeletegateCommand(Action<T> excute, Func<bool> canExcute)
                : this(excute, (o) => canExcute())
            { }
            public DeletegateCommand(Action<T> excute,Func<T,bool> canExcute):base((o)=>excute((T)o),(o)=>canExcute((T)o))
            {
            }
            #endregion
    
            #region << Method >>
            public bool CanExecute(T parameter)
            {
                return base.CanExecute(parameter);
            }
    
            public void Execute(T parameter)
            {
                base.Execute(parameter);
            }
            #endregion
        }
    }

    上面是DelegateCommand的实现。下面是使用的代码。超级简约(只显示ViewModel,XAML的command的就不显示了)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Input;
    
    namespace WpfApplication4
    {
        public class MainWindowsViewModel
        {
            #region << Property >>
            public ICommand DemoCommand { get; set; }
            #endregion
    
            #region << Constructor >>
            public MainWindowsViewModel()
            {
                DemoCommand = new DeletegateCommand<string>(DemoMethod);
            }
            #endregion
    
            #region << Method >>
            public void DemoMethod(string input)
            {
                MessageBox.Show(input as string);
            }
    
            public bool CanDemoMethod()
            {
                return false;
            }
            #endregion
    
        }
    }
  • 相关阅读:
    一个纠结的问题
    打开SQL Developer时,提示缺少快捷方式
    打开eclipse时,An error has occurred. See the log file
    bash: id : command not found
    Fatal error: Call to undefined function: mysql_connect()解决方法
    struts.xml中标签自动提示问题
    Hibernate向Oracle中添加自增字段
    linux 忘记root密码的解决办法
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
    Ctrl+Alt+Fn不能切换到字符界面
  • 原文地址:https://www.cnblogs.com/qiurideyun/p/2910388.html
Copyright © 2020-2023  润新知