加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – MvvmCross,UWP,MessengerPlugin:无法加载页面

发布时间:2020-12-15 22:40:59 所属栏目:百科 来源:网络整理
导读:问题是:当我将IMvxMessanger的构造函数DI添加到ViewModel时出现错误:“无法加载页面”;如果我将删除此DI,我的工具工作正常.顺便说一下,IHelloService不会给出这个错误,只有没有IMvxMessanger才能正常工作. 我遵循了这本手册:https://mvvmcross.com/docs/a
问题是:当我将IMvxMessanger的构造函数DI添加到ViewModel时出现错误:“无法加载页面”;如果我将删除此DI,我的工具工作正常.顺便说一下,IHelloService不会给出这个错误,只有没有IMvxMessanger才能正常工作.

我遵循了这本手册:https://mvvmcross.com/docs/a-windows-universal-app-platform-project

MvvmCross版本:4.4.0

代码示例:

FirstViewModel

public class FirstViewModel : MvxViewModel
{
    private readonly IHelloService _helloService;
    private readonly IMvxMessenger _messenger;

    public FirstViewModel(IHelloService helloService,IMvxMessenger messenger)
    {
        _helloService = helloService;
        _messenger = messenger;
    }

    private string _hello = "Hello MvvmCross";
    public string Hello
    {
        get { return _hello; }
        set { SetProperty(ref _hello,value); }
    }
}

FirstView.xaml.cs

public sealed partial class FirstView : MvxWindowsPage
{
    public FirstView()
    {
        InitializeComponent();
    }
}

FirstView.xaml

<views:MvxWindowsPage
x:Class="MvvmCrossDocs.UWP.Views.FirstView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MvvmCrossDocs.UWP.Views"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="using:MvvmCross.WindowsUWP.Views"
mc:Ignorable="d">

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel>
        <TextBox Text="{Binding Hello,Mode=TwoWay}" />
        <TextBlock Text="{Binding Hello}" />
    </StackPanel>
</Grid>

建立

public class Setup : MvxWindowsSetup
{
    public Setup(Frame rootFrame) : base(rootFrame)
    {
    }

    protected override IMvxApplication CreateApp()
    {
        return new Core.App();
    }
}

这也是App.xaml.cs中的这一行

if (rootFrame.Content == null)
{
    var setup = new Setup(rootFrame);
    setup.Initialize();

    var start = Mvx.Resolve<IMvxAppStart>();
    start.Start();
}

解决方法

我相信问题是你在UWP项目中缺少MvxMessenger的bootstrap类. UWP使用Nuget 3引入的project.json模板.目前,当您安装nuget包时,不允许向项目添加附加文件.

解决方法是手动添加bootstrap文件夹和相关的插件bootstrap.cs文件,或者您可以在Setup.cs中注册插件的界面和实现.

引导方法:

创建一个MessengerPluginBootstrap.cs

using MvvmCross.Platform.Plugins;

namespace <<YOUR_NAMESSPACE>>.Bootstrap
{
    public class MessengerPluginBootstrap
            : MvxPluginBootstrapAction<MvvmCross.Plugins.Messenger.PluginLoader>
    {
    }
}

Setup.cs方法:

根据MvxMessengerHub实现注册IMvxMessenger的接口.

protected override void InitializeLastChance()
{
    base.InitializeLastChance();
    Mvx.RegisterSingleton<IMvxMessenger>(new MvxMessengerHub());
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读