菲佣的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

    }
}

 

 

 

转载于:https://www.cnblogs.com/qiurideyun/archive/2013/02/12/2910388.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值