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()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |