安装完成后,我们可以直接通过VS2010或blend4创建基于MVVM Light模板的项目了,通过模板创建的初始项目已经有一个简单的实例,我们先研究他。
相比一般的wp7项目,它默认创建了Model、ViewModel两个文件夹,ViewModel文件夹中有两个简单代码文件。具体内容后面再说。
默认创建的MainPage.xaml页面看到的时候是个空白页面,上面没有任何内容。然而却有个错误提示。(很奇怪,刚创建就有错误提示)。
这时候编译一下,发现更奇怪的事情发生了,MainPage.xaml页面出了一些内容。(哈哈,我这个外行很见怪)。
查过相关资料后,发现这个MVVM Light模板其实隐藏了很多东西,它帮我们创建了,但我们还是需要了解下的:
1、App.xaml中添加了针对ViewModel命名空间的引用,就是在Application段添加了
xmlns:vm="clr-namespace:MvvmLight6.ViewModel"
这样一段,xmlns是xml命名空间的意思。
2、另外,在<Application.Resources>段中,注册了这样一个资源:
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
这里的vm是前面定义的命名空间,ViewModelLocator是命名空间中的类,标记其Key为Locator,并确定其为数据源。
这里还有一种写法,就是不在第一步声明命名空间,直接在这里写资源:
<vm:ViewModelLocator xmlns:vm="clr-namespace:MvvmLight6.ViewModel" x:Key="Locator" />
当然,也可以在具体页面中引用资源。
3、下一步就是在页面中绑定资源了
<phone:PhoneApplicationPage
……
DataContext="{Binding Main, Source={StaticResource Locator}}"
……
>
这里的Main是Locator(也就是ViewModelLocator 类)中的一个属性,查代码可以看到它是一个
MainViewModel对象。
4、这时候页面中所有的控件都可以直接使用Main中的属性进行绑定,默认代码可见:
<TextBlock x:Name="ApplicationTitle"
Text="{Binding ApplicationTitle}"
Style="{StaticResource PhoneTextNormalStyle}" />
绑定的写法就是中括号中直接写个Binding,后面填写对应的属性名ApplicationTitle。这就是我在文章开头所看到的闹鬼事件。在编译前,这些资源还不存在。编译之后,这些资源就可以正常绑定了。
了解了前面这4方面的内容,对MVVM应该已经有一个比较清晰的印象了。不过这只是皮毛,事件的绑定还没出现呢。