【问题标题】:Windows Phone 8 MVVM light navigation with non string parameter带有非字符串参数的 Windows Phone 8 MVVM 灯光导航
【发布时间】:2013-04-07 12:27:17
【问题描述】:

我是 .NET/c# 领域的新手,我正在尝试开发 Windows Phone 8 应用程序。 我有几页显示对象列表(ListPage)。所有这些页面都将具有过滤功能,使用通用符号FilterPage

我需要将对象从ListPage 传递给FilterPage。 我想使用 MVVM(MVVM 灯光模板)。我已经设法使用消息传递框架实现了几乎所有内容。我正在使用FilterMessage,它将对象传递到其构造函数中。 ListPageFilterViewModel 收听此消息。 ListPage 将导航到FilterPageFilterViewModel 将从消息中获取对象。 ListPage 得到正确通知,但 FilterViewModel 没有得到通知,因为 FilterViewModel 仅在 FilterPage 首次显示后创建。

是否可以通过 App start 来初始化 FilterViewModel? 如果您认为这不是要走的路,请告诉我原因:)

提前致谢。

【问题讨论】:

    标签: c# .net mvvm windows-phone-8 mvvm-light


    【解决方案1】:

    我在这种情况下所做的是将您要传递到其他页面的实例添加到您在 PhoneApplicationService.Current.State 下的 Session 对象中。

    在完成导航后,您可以提取实例,然后将其从状态中删除。

    请注意,如果您的应用程序在 State 中有实例时进入后台,WP 会尝试序列化它们。

    【讨论】:

    • 是的,如果您按照自己的方式进行操作,它就可以工作。但是我真的很想使用 MVVM 消息传递,这是我了解 MVVM 的最佳时机\项目。感谢您的回答
    【解决方案2】:

    我设法通过在ViewModelLocator 构造函数中创建FilterViewModel 实例来使其工作。我不确定这是不是最好的方法。希望有更多经验的人与我们分享他的想法。

    public ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
    
        SimpleIoc.Default.Register<FilterViewModel>();
    
        ServiceLocator.Current.GetInstance<FilterViewModel>();
    }
    

    【讨论】:

    • 由于没有其他人提出更好的解决方案,我将把它标记为最终答案。如果有人有更好的解决方案,请发布,我会将其标记为解决方案。
    • stackoverflow.com/questions/28615841/… 请让我知道您是否可以帮助我,而无需在信使中传递对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多