【问题标题】:Windows Phone 7: MVVMLight and MessengerWindows Phone 7:MVVMLight 和 Messenger
【发布时间】:2011-07-30 21:52:48
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我发现他们之前创建 VM 的方法是 Laurent 提到的在注册 VM 时使用不同的构造函数:SimpleIoc.Default.Register(true) true 标志将其设置为初始化立即。
    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多