2016-12-22 11 views
4

Проблема: когда я добавил конструктор DI из IMvxMessanger к ViewModel я получил сообщение об ошибке: "Не удалось загрузить страницу"; Если я удалю этот DI, мой инструмент отлично работает. Btw, IHelloService не даст этой ошибки, он отлично работает только с IMvxMessanger.MvvmCross, UWP, MessengerPlugin: Не удалось загрузить страницу

Я после этого руководства: 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(); 
} 

ответ

1

Я считаю, что вопрос заключается в том, что вы отсутствует класс bootstrap для MvxMessenger в вашем U WP. UWP использует шаблон project.json, который был представлен с Nuget 3. В настоящее время, когда вы устанавливаете пакеты nuget, они не позволяют добавлять файл добавления в ваш проект.

Обходной путь заключается в том, чтобы вручную добавить папку bootstrap и соответствующий файл плагина bootstrap.cs, или вы можете зарегистрировать интерфейс и реализацию плагина в своем Setup.cs.

Bootstrap подход:

Создать подход MessengerPluginBootstrap.cs

using MvvmCross.Platform.Plugins; 

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

Setup.cs:

Регистрация интерфейс IMvxMessenger против MvxMessengerHub implementat ион.

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

Я скопировал папку _Bootstrap_ из моего проекта Droid и разрешил пространства имен -> 0 изменений, получил ту же ошибку. –

+0

Также я попробовал 'InitializeLastChance' в _Sturtup.cs_ файле. Также такая же ошибка :( –

+0

Хммм, интересно. У вас есть stacktrace исключения? Возможно, вы попробовали очистить и перестроить? – Plac3Hold3r