zoukankan      html  css  js  c++  java
  • 菲佣的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
    
        }
    }
  • 相关阅读:
    6-4.粗体标签
    [Unity3D] 如何实现点击按钮退出游戏
    [Unity3D] 载入游戏地图时背景图片随机切换 & 数字百分比进度条
    [Unity3D] 鼠标点击图片移动效果
    [3DMAX]如何将骨骼与模型绑定在一起(蒙皮) & 如何实现自动化人物模型蒙皮
    [Unity 3D]用鼠标滚轮实现镜头放大和缩放,并添加距离限制
    [Unity3D] 如何实现围绕旋转
    [Unity3D] 如何实现注视旋转
    Css 图片自适应
    Scss 定义内层class的简单写法
  • 原文地址:https://www.cnblogs.com/qiurideyun/p/2910388.html
Copyright © 2011-2022 走看看