国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

WPF之MVVM(Step2)——自己實(shí)現(xiàn)DelegateCommand:ICommand

2019-11-17 02:40:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

WPF之MVVM(Step2)——自己實(shí)現(xiàn)DelegateCommand:ICommand

在自己實(shí)現(xiàn)MVVM時(shí),上一篇的實(shí)現(xiàn)方式基本是不用,因其對(duì)于命令的處理不夠方便,沒(méi)寫(xiě)一個(gè)命令都需要另加一個(gè)Command的類(lèi)。此篇主要介紹DelegateCommand來(lái)解決上面所遇到的問(wèn)題。

首先,我們創(chuàng)建自己的DelegateCommand。

代碼如下:

 /// <summary>    /// 實(shí)現(xiàn)DelegateCommand    /// </summary>    class MyDelegateCommand : ICommand    {        /// <summary>        /// 命令所需執(zhí)行的事件        /// </summary>        public Action<object> ExecuteCommand { get; set; }        /// <summary>        /// 命令是否可用所執(zhí)行的事件        /// </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>        /// 命令具體執(zhí)行        /// </summary>        /// <param name="parameter"></param>        public void Execute(object parameter)        {            ExecuteCommand(parameter);        }    }

 

其中的重點(diǎn)是利用兩個(gè)委托,將方法的實(shí)現(xiàn)分離出去,接下來(lái)看我們的ViewModel:

  class TestViewModel : INotifyPRopertyChanged    {        private string teststr;        /// <summary>        /// 待通知字符串        /// </summary>        public string TestStr        {            get { return teststr; }            set            {                teststr = value;                RaiseChanged("TestStr");            }        }        /// <summary>        /// 測(cè)試命令        /// </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執(zhí)行的方法        /// </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接口實(shí)現(xiàn)        public void RaiseChanged(string propertyname)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(propertyname));            }        }        public event PropertyChangedEventHandler PropertyChanged;        #endregion    }

其中的Test,CanTest就是之前寫(xiě)在Command中的實(shí)現(xiàn),通過(guò)此實(shí)現(xiàn),我們可以將界面呈現(xiàn)邏輯全部集中到ViewModel中。

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

 


項(xiàng)目代碼托管地址:https://wpfmvvm.codeplex.com/
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 铅山县| 静宁县| 合川市| 黄陵县| 延寿县| 彭阳县| 来凤县| 集安市| 镇巴县| 桦南县| 尚义县| 绥中县| 双峰县| 迭部县| 昔阳县| 五华县| 民县| 集安市| 闻喜县| 连南| 民和| 诸城市| 北辰区| 徐闻县| 乌鲁木齐县| 清丰县| 博野县| 临高县| 太仆寺旗| 彰化县| 固镇县| 思南县| 若羌县| 环江| 崇左市| 双牌县| 红桥区| 衢州市| 普定县| 图片| 迁西县|