浅谈MVVM模式之命令绑定


MVVM模式之命令绑定

本人技术水平有限,我喜欢用最通俗的想法去思考问题.

那些晦涩难懂的词汇,我在这里都不会提起,我也就用一些自认为还算通俗的语言去讲解.

下面就来谈谈MVVM模式.(每个人思考问题是不一样的,也许你有你的想法!)

所谓MVVM模式,就是UI和逻辑分开的模式.首先我们需要知道为什么需要分开,以及分开会有什么样的好处.

假设:我们做了一个显示一句话的小程序.今天我们做好了,界面如下:

 

很简单的界面,可是明天突然有需求了.就是要重新换一个新的界面,那么所有的变量都变了,那么以传统的做法,你代码都在当前MainPage里,那么,要换界面,你就需要更改所有的变量名,还有很多逻辑代码也用到了与控件相关的变量,那么修改起来,会相当的麻烦.还要复制拷贝代码;当我们使用了MVVM模式,UI和逻辑代码分离开来.那么再当你换掉界面时,我们只需要在新的界面上的控件,重新绑定下就可以了,而关于逻辑的不需要我们做任何的改动,会很方便.

打个比方来说:我们的手机都需要用到电池.

苹果的手机,就很像我们传统的代码.因为他的电池不可以换,如果换起来,会相当的麻烦,因为里面的电池和手机是紧密相连的,如果要换,我们需要做很复杂的操作,把电池去下,然后还要用焊接的方法,把电池的两根线焊到主板上.如果你弄错了,就打开不了手机.就等于程序变量,如果你换错了,程序就报错一样.

诺基亚手机就像我们的MVVM模式,我们只需要取下外壳,取下没电的电池,装上新电池,就可以了.很简单.不用考虑焊接的问题,所以很简单.

下面,来说下,如何创建一个简单的示例:

要实现的内容:就是点击按钮,显示一句话,且事件的代码逻辑不在页面后台类.通过绑定按钮的Command命令去执行.

实现步骤:

 
首先,我们需要创建一个类.实现ICommand这个接口,代码如下:

namespace ShowMsg

{

    public class MyCommand : ICommand

    {

        public bool CanExecute(object parameter)

        {

            return true;   //表示是否执行下面那个Execute方法.

        }

        public event EventHandler CanExecuteChanged;

 

        public void Execute(object parameter)   //这里是定义按钮按下去,需要执行的内容

        {

            MessageBox.Show("我这里是定义死了,你可以通过传值的方法,来自定义显示的内容.");

        }

    }

}

 

接着,我们创建一个viewmodel类,这个类也就是所谓的业务逻辑类.(这里暂时没讲到属性变化问题,所以没有去实现INotifyPropertyChanged这个接口);
这个类的代码如下:

 

namespace ShowMsg
{
    public class ViewModel
    {
        public ICommand MyCmd
        {
            get
            {

                return new MyCommand();
            }
        }
    }
}

 

所有的工作都准备好了,我们就为xaml的page类的构造函数那里,把viewmodel的实例绑定到xaml这个页面的数据上下文中,然后我们值需要给按钮绑定下Command属性,就可以了代码如下:
{

    public partial class MainPage : PhoneApplicationPage

    {

        // 构造函数

        public MainPage()

        {
            InitializeComponent();
            DataContext = new ViewModel();  //将viewModel这个实例绑定到当前页面的D数据上下文上!
        }

    }

}

最后是按钮的绑定.

<Button Content="ShowMsg"  Command="{Binding MyCmd}" Height="158" Margin="91,244,106,0" Name="button1" VerticalAlignment="Top" />

 

当我们点击按钮,就会执行了.效果如图:

 

 

 

       最后希望这篇文章能对大家还是有点帮助的,如果大家认为还算能听懂,那么我会在不久,加上关于命令有参数的处理方法.

      


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM