像我们知道的一样,Windows Phone支持ISolateStorage,Mango中还新增了使用Linq的SQL CE作为本地数据库。下面我们就用MVVMLight来模拟个消息发送和查看消息历史记录的IM简易聊天窗口,来看看WP7是怎么使用ISolateStorage和Local DataBase的:
一.新建MVVMLight的Windows Phone Project
MVVMLight的教程可以在园子里搜一下,或者去MVVMLight作者的官方网站。建完Project后,MVVMLight的Windows Phone 模板已经自动生成了MainPage.xaml,以及一个MainViewModel。我们在Project中添加View文件夹,新建两个View,即两个PhoneApplicationPage,作为发送Message窗口和查看Message History记录。还有新建一个ViewModel(MessageViewModel),Model中新增一个HaisaDataBase,用来管理我们的LocalDataBase。本来想定义一个ISolateStorageManager的Helper类,但是微软已经把ISolateStorage封装的够简单了,所以此处就省略了。
添加后如下图示:
可以看到图中工程中有个icons的文件夹,是用来保存PhoneApplicationPage.ApplicationBar的图标文件。
二.在Model中建立SQL CE数据库
我们新建个UserInfoTable,使其继承INotifyPropertyChanged,INotifyPropertyChanging接口,并对其声明[Table] Attribute。在UserInfoTable表中声明几个属性作为Table的Column,在属性前面加上[Column] Attribute。包括
UserId、UserNameAndTime、UserPwd、UserMessage。代码类似下图:1: [Table]class UserInfoTable:INotifyPropertyChanged,INotifyPropertyChanging3:#region UserId Columnint _userId;false,AutoSync=AutoSync.OnInsert)]int UserId8: {return _userId; }10: set{return;12:);value;);16:17: }#endregion19: .........20:21: }在Windows Phone中,即可用UserInfoTable Class来生成数据库中的UserInfoTable表,当然要记得引用下面几个命名空间
using System.Data.Linq; using System.Data.Linq.Mapping; using Microsoft.Phone.Data.Linq; using Microsoft.Phone.Data.Linq.Mapping;我们再新建一个HaisaDataContext类继承DataContext,构造函数继承DataContext的构造函数,在其中添加我们的ConnectionString,还有声明我们的Table,如下面代码:
class HaisaDataContext:DataContext2: {;base(connectionString){}public Table<UserInfoTable> HaisaTable;6:7: }到这里我们的LocalDataBase就建立完了,关于Local DataBase的更多信息请查看MSDN。
三.建立MessageView.xaml界面以及绑定MessageViewModel
我们在MainPage.xaml中添加一个HyperlinkButton,设置NavigateUri="/View/MessageView.xaml" 。
然后我们开始设计MessageView.xaml,用VS或者Blend在MessageView.xaml中设计类似聊天工具的界面时,我们先加入一个Listbox来显示当前发送的Message列表,然后添加一个消息输入框和Send Message按钮。如图示:
第二个图中可以看到一个ApplicationBar,这个ApplicationBar用来查看消息历史记录,导航至新的Message History Page。
ApplicationBar的添加类似下面:
>>>/>>/>>>其中ApplicationBarIconButton的appbar_HistoryButton_Click中调用NavigationService的Navigate方法进行导航。
后台代码如下:
object sender, System.EventArgs e)2: {,UriKind.RelativeOrAbsolute));4: }第一步中我们已经建立了一个新的MessageViewModel,作为MessageView和MessageHistoryView公用的ViewModel,当然,实际建项目时这两个最好分开,因为功能不一致,但是我们这里只共用一个ViewModel以简化代码。
我们在ViewModelLocator中注册MessageViewModel:
public MessageViewModel MsgViewModel2: {3: get4: {new MessageViewModel();6: }7:8: }这样子我们就可以在MessageView和MessageHistoryView的xaml文件中通过这样的方式在View中绑定ViewModel
DataContext="{Binding MsgViewModel,Source={StaticResource Locator}}"到这一步,基本框架的东西都已经搭好了,下一步就是开始添加SendMessage和ShowMessageHistory的功能,我们将在下一篇中继续,
Coming Soon…….
相关文章: