麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

WPF之MVVM(Step2)——自己實現DelegateCommand:ICommand

2019-11-17 02:40:18
字體:
來源:轉載
供稿:網友

WPF之MVVM(Step2)——自己實現DelegateCommand:ICommand

在自己實現MVVM時,上一篇的實現方式基本是不用,因其對于命令的處理不夠方便,沒寫一個命令都需要另加一個Command的類。此篇主要介紹DelegateCommand來解決上面所遇到的問題。

首先,我們創建自己的DelegateCommand。

代碼如下:

 /// <summary>    /// 實現DelegateCommand    /// </summary>    class MyDelegateCommand : ICommand    {        /// <summary>        /// 命令所需執行的事件        /// </summary>        public Action<object> ExecuteCommand { get; set; }        /// <summary>        /// 命令是否可用所執行的事件        /// </summary>        public Func<object, bool> CanExecuteCommand { get; set; }        public MyDelegateCommand()        {        }        public MyDelegateCommand(Action<object> execute, Func<object, bool> canexecute)        {            ExecuteCommand = execute;            CanExecuteCommand = canexecute;        }        /// <summary>        /// 命令可用性獲取        /// </summary>        /// <param name="parameter"></param>        /// <returns></returns>        public bool CanExecute(object parameter)        {            return CanExecuteCommand(parameter);        }        public event EventHandler CanExecuteChanged        {            add { CommandManager.RequerySuggested += value; }            remove { CommandManager.RequerySuggested -= value; }        }        /// <summary>        /// 命令具體執行        /// </summary>        /// <param name="parameter"></param>        public void Execute(object parameter)        {            ExecuteCommand(parameter);        }    }

 

其中的重點是利用兩個委托,將方法的實現分離出去,接下來看我們的ViewModel:

  class TestViewModel : INotifyPRopertyChanged    {        private string teststr;        /// <summary>        /// 待通知字符串        /// </summary>        public string TestStr        {            get { return teststr; }            set            {                teststr = value;                RaiseChanged("TestStr");            }        }        /// <summary>        /// 測試命令        /// </summary>        public ICommand TestCommand { get; set; }        public TestViewModel()        {            TestCommand = new MyDelegateCommand();            (TestCommand as MyDelegateCommand).ExecuteCommand = Test;            (TestCommand as MyDelegateCommand).CanExecuteCommand = CanTest;            //or            //TestCommand = new MyDelegateCommand(Test, CanTest);        }        int i = 0;        /// <summary>        /// testcommand執行的方法        /// </summary>        /// <param name="para"></param>        private void Test(object para)        {            i++;            TestStr = i.ToString();        }        /// <summary>        /// testcommand是否可用        /// </summary>        /// <param name="para"></param>        /// <returns></returns>        private bool CanTest(object para)        {            return true;        }        #region INotifyPropertyChanged接口實現        public void RaiseChanged(string propertyname)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(propertyname));            }        }        public event PropertyChangedEventHandler PropertyChanged;        #endregion    }

其中的Test,CanTest就是之前寫在Command中的實現,通過此實現,我們可以將界面呈現邏輯全部集中到ViewModel中。

其界面還是一樣使用上一篇的。

 


項目代碼托管地址:https://wpfmvvm.codeplex.com/
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人性生活视频在线观看 | 7m视频成人精品分类 | 黄色特级一级片 | 久久免费视频一区二区三区 | 亚洲影视中文字幕 | xxxx69hd一hd72| 欧美成人高清视频 | 欧美成人高清视频 | 国产午夜免费福利 | 91精品老司机| 免费欧美一级视频 | 制服丝袜成人动漫 | 护士hd欧美free性xxxx | 制服丝袜日日夜夜 | 成年人国产视频 | 久色免费视频 | 亚洲网站一区 | 日本欧美一区二区三区在线观看 | 欧美伦交 | 国产精品久久久久久久久久iiiii | 免费专区 - 91爱爱 | 国产精品久久久久久久久久10秀 | 福利在线国产 | 日本欧美一区二区三区在线播 | 免费观看国产精品视频 | www.精品视频 | 亚洲片在线观看 | 成人富二代短视频 | 国产噜噜噜 | 免费国产自久久久久三四区久久 | 中文字幕专区高清在线观看 | 4480午夜 | 国产一级毛片a | 中文字幕亚洲一区二区三区 | 久久日韩| 成人国产在线看 | 色成人在线 | 亚洲精品午夜国产va久久成人 | xnxx 日本免费| 999插插插 | 欧美a久久|