【问题标题】:How to get MVVM Light Messenger working with a PCL如何让 MVVM Light Messenger 与 PCL 一起工作
【发布时间】:2014-02-24 16:56:26
【问题描述】:

我目前正在重新组织我的 WP8 项目,以便拥有一个可移植的类库,这可能会产生一个 W8 应用程序。

我正在使用 MVVMLight 并且有以下代码:

在可移植类库中:

namespace MyApp.Shared.Messages
{
    public class MyItemSelectedMessage : MessageBase
    {
        public MyItemSelectedMessage(MyItem item)
        {
            Item = item;
        }
        public MyItem Item { get; set; }
    }
}

在我的 WP8 应用程序中,我仍然有 ViewModels(因为 Telerik 和其他一些我无法外包给 PCL 的东西),我使用以下代码注册消息:

Messenger.Default.Register<MyItemSelectedMessage>(this, msg => SelectedItem = msg.Item);

代码之前运行良好,但现在 VS 在给定行的 WP8 应用程序中给我以下错误:

The type 'GalaSoft.MvvmLight.Messaging.MessageBase' is defined in an assembly that is not referenced. You must add a reference to assembly 'GalaSoft.MvvmLight, Version=4.2.30.16997, Culture=neutral, PublicKeyToken=null'

在我的 WP8 项目中,我安装了 MvvmLight (v4.2.30.23483),在我的 PCL 中有用于 PCL (v4.2.30.16997) 的 MvvmLight 库,它们都是来自 Nuget 的最新版本。我是否需要降级软件包以获得相同的内部版本号、手动添加库或我可以做些什么才能使其正常工作?

提前致谢!

【问题讨论】:

    标签: c# windows-phone-8 windows-phone mvvm-light portable-class-library


    【解决方案1】:

    您应该从两个项目中引用 Portable.MvvmLightLibs NuGet 包,而不是任何不可移植的 MvvmLight 包。 Portable.MvvmLightLibs 包包括对 PCL 和特定平台库的支持。

    【讨论】:

    • 但是我的 WP8 应用程序中确实有 2 个 MvvmLightLibs - WP8 nuget 包所依赖的一个(无法删除...)和 PCL 库。如何告诉我的代码它应该使用 PCL 版本?或者如何用PCL版本替换WP8所依赖的那个?
    • @sibbl 你使用的是什么 WP8 NuGet 包,它依赖于 MvvmLight?
    • nuget.org/packages/MvvmLight官方包,我之前也用过。将 PCL 版本添加到 WP8 项目中,添加了另一个 MvvmLightLib,这样 VS 只会给我很多错误,因为命名空间出现了两次。
    • @sibbl 你需要从 WP8 项目中卸载官方包并安装 Portable.MvvmLightLibs 包来代替
    • 难以置信这是多么容易...我认为 WP8 包里面的东西比 PCL 更神奇。感谢您的帮助,它完美运行! :)
    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    相关资源
    最近更新 更多