跨平台.NET框架开发实践

在.NET框架下开发跨平台应用程序,如Silverlight、Windows Phone 7、XBox 360等,并非易事。尽管理论上可以通过Portable Class Library(PCL)实现代码的跨平台复用,但实际上支持的范围有限。本文将介绍如何使用MVVM Light框架在Windows Store和Windows Phone平台上进行开发,并实现代码的复用。

MVVM Light框架

MVVM Light是一个轻量级的MVVM框架,适用于Silverlight、WPF、Windows Phone和Windows Store平台。作者已使用该框架多年,并且随着每个新版本的发布,框架的功能也在不断增强。最近,MVVM Light的爱好者Oren Novotny将MVVM Light项目移植到了PCL中,使得代码复用变得更加方便。

创建示例项目

打开Visual Studio 2012,创建一个新的项目。首先创建一个空白的Visual Studio解决方案,命名为"MvvmPortable"。然后添加一个Windows Store应用(C#空白模板),命名为"Mvvm.Store"。接着添加一个新的Windows Phone 8项目,命名为"Mvvm.Phone"。最后,添加一个新的PCL项目到解决方案中。

在创建PCL项目时,会弹出一个对话框要求选择支持的平台。除了XBox之外,其他平台都可以选择。对于Windows Phone,选择7.5或更高版本。如果选择了"Windows Phone 7.1或更高"选项,后续添加NuGet包时会出现错误。

使用NuGet添加MVVM Light包

如果还没有使用NuGet,请先访问nuget.org网站,或通过Tools->Extensions And Updates进行安装。接下来,通过NuGet添加MVVM Light包到PCL项目中。右键点击项目,选择Manage Nuget Packages,在对话框中搜索"Portable.MvvmLightLibs",并确保勾选了Include Pre-release选项。也可以使用PackageManager控制台,使用命令"install-package portable.mvvmlightlibs -prerelease"进行安装。

对于Windows Phone和Windows Store项目,重复上述过程添加MVVM Light包。

移动ViewModelLocator、ViewModels并连接它们

在PCL项目中创建一个名为"ViewModel"的文件夹。然后,在"Mvvm.Store"项目的"ViewModel"文件夹中选择"ViewModelLocator.cs"和"MainViewModel.cs"文件,并将它们复制粘贴到PCL项目的"ViewModel"文件夹中。打开这些文件,将命名空间从"Mvvm.Store.ViewModel"更改为"Mvvm.PCL.ViewModel"。

由于ViewModelLocator已经移动,Store应用需要知道在哪里找到它和ViewModels。打开"Mvvm.Store"项目的"App.xaml"文件,将: xmlns:vm="using:Mvvm.Store.ViewModel" 更改为: xmlns:vm="using:Mvvm.PCL.ViewModel" 同时,需要修改Resources部分,因为MvvmLight的NuGet安装器会添加一些额外的ViewModelLocator条目。

最后,对于Store应用,将在"MainPage.xaml"中设置DataContext,并添加一个TextBlock,以便从可移植类库中的"MainViewModel.cs"中填充数据。

为Phone项目设置

Phone项目的过程与Store项目类似。不同的是,不需要移动Phone项目中的ViewModel文件夹,可以直接删除它。

打开"App.xaml"文件,进行调整以让应用程序知道ViewModelLocator和ViewModels的位置。注意,在Phone项目中进行这些引用与Store项目有所不同,虽然微妙但可能会出错。

接下来,打开"MainPage.xaml"文件,添加DataContext声明和TextBlock,就像在Store应用中所做的那样。

MVVM Light框架的其他功能在特定项目中仍然可用,或者也可以将它们提取出来。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485