2

我正在尝试让 MVVMLight 在 Windows Phone 7 上工作,但在理解范式时遇到了一个小问题。

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

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

4

1 回答 1

4

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

在 MVVM Light 中,VM 连接到 XAML 中的视图的方式,VM 将很早就被激活(只要在后面的代码中命中 InitializeComponent)。如果您需要提前创建 VM,可以在 ViewModelLocator 中进行。我将在我的 MIX11 会议(Deep Dive MVVM)上展示这一点,因此请在视频发布时查看(我将在我的博客http://blog.galasoft.ch中提及)。

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

我希望这会有所帮助,洛朗

于 2011-04-07T08:38:33.353 回答