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" />
当我们点击按钮,就会执行了.效果如图:
最后希望这篇文章能对大家还是有点帮助的,如果大家认为还算能听懂,那么我会在不久,加上关于命令有参数的处理方法.