Windows Phone 7:MVVMLight和Messenger

时间:2011-04-06 14:46:42

标签: database windows-phone-7 mvvm mvvm-light windows-phone

我正在努力让MVVMLight在Windows Phone 7上运行,并且遇到一个小问题让我对这个范例感兴趣。

我认为应遵循的方案是: 1.)当主视图模型加载时,通过MVVM Light Messenger发送消息以检查数据库是否存在 2.)ViewModel接收消息,如果没有数据库,则通过messenger将消息发送回View以显示安装View(导航到它) 3.)安装程序视图由第一个视图

显示

问题似乎是调用事件的顺序。视图成功检查是否存在数据库并发送消息,但视图模型尚未初始化(构造函数中的断点在发送消息时未被命中),因此表单未显示。我是以正确的方式处理这个问题,还是应该在View中检查数据库是否存在?

1 个答案:

答案 0 :(得分:4)

Messenger只能向内存中存在的对象发送消息(旁注,我正在考虑添加一些“离线消息”解决方案,但它实际上只是一个愿景,甚至还没有蓝图)。

在MVVM Light中,VM连接到XAML中的视图的方式,VM将很早就生效(只要在后面的代码中触发了InitializeComponent)。如果您需要先创建VM,可以在ViewModelLocator中执行此操作。我将在我的MIX11会话(Deep Dive MVVM)上展示,所以在发布时检查视频(我将在我的博客http://blog.galasoft.ch上提及)。

如果您没有使用MVVM Light绑定视图和VM的方式,并且VM尚未存在于内存中,则一种方法是“缓存”该消息以供日后使用。创建一个轻量级对象,该对象仅用于接收消息并存储它。然后,在创建VM时,检索该消息。如果你愿意的话,这是一个消息队列。

我希望这有帮助, 劳伦