MVVMCross Xamarin.Forms.UWP с TipCalc

VS2017 версии 15.9.3, Xamarin Forms 3.4, Mvvmcross 6.2.2

В VS2017 можно создавать проекты Android, Ios и UWP с помощью общего проекта форм Xamarin.

Я заинтересован в использовании MVVMCross для поддержки MVVM и сокращения шаблонного кода.

На веб-сайте MVVMCross есть руководство по созданию UWP TipCalc, но не Xamarin.Forms.UWP TipCalc, который использует код пользовательского интерфейса совместно с Android и iOS.

Я думал, что если я возьму проект UWP Tipcalc, удалю представления и сделаю ссылку на проекты Forms.UI и Forms.Core, он будет правильно соединен, но, очевидно, нет.

App.xaml

<local:TipCalcApp x:Class="MX_TipCalc.UWP.UWP.App"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:local="using:MX_TipCalc.Forms.UWP.UWP"
          RequestedTheme="Light">
    <Application.Resources>
        <x:String x:Key="WelcomeText">Hello World!</x:String>
    </Application.Resources>
</local:TipCalcApp>

App.xaml.cs

using MvvmCross.Platforms.Uap.Core;
using MvvmCross.Platforms.Uap.Views;

namespace MX_TipCalc.Forms.UWP.UWP
{
    public sealed partial class App
    {
        public App()
        {
            InitializeComponent();
        }
    }

    public abstract class TipCalcApp : MvxApplication<MvxWindowsSetup<Core.App>, Core.App>
    {
    }
}

Что нужно для того, чтобы проект MVVMCross Xamarin.Forms.UWP подключился к TipCalc.Forms.UI и TipCalc.Forms.Core, чтобы он заработал?

Спасибо

Итак, после ответа Нико Чжу - MSFT My App.xaml

<local:TipCalcApp x:Class="MX_TipCalc.Forms.UWP.UWP.App"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="using:MX_TipCalc.Forms.UWP.UWP"
                    RequestedTheme="Light">
    <Application.Resources>
        <x:String x:Key="WelcomeText">Hello World!</x:String>
    </Application.Resources>
</local:TipCalcApp>

Мой App.xaml.cs - это

using MvvmCross.Forms.Platforms.Uap.Core;
using MvvmCross.Forms.Platforms.Uap.Views;
using MX_TipCalc.Forms.UI;

namespace MX_TipCalc.Forms.UWP.UWP
{
    public sealed partial class App
    {
        public App()
        {
        InitializeComponent();
       }
    }

    //public abstract class TipCalcApp : 
MvxApplication<MvxWindowsSetup<Core.App>, Core.App>
    //{
    //}

    public abstract class TipCalcApp : MvxWindowsApplication<MvxFormsWindowsSetup<Core.App, FormsApp>, Core.App, FormsApp, MainPage>
    {
    }
}

Мой MainPage.xaml - это

<mvxf:MvxFormsWindowsPage
   xmlns:mvxf="using:MvvmCross.Forms.Platforms.Uap.Views"
   x:Class="MX_TipCalc.Forms.UWP.UWP.MainPage"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:local="using:MX_TipCalc.Forms.UWP.UWP"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   mc:Ignorable="d">

   <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

   </Grid>

My MainPage.xaml.cs is

   using MvvmCross.Forms.Platforms.Uap.Views;

   namespace MX_TipCalc.Forms.UWP.UWP
   {
       public partial class MainPage : MvxFormsWindowsPage
       {
       public MainPage()
           {
               InitializeComponent();
           }
       }
   }

Хорошая новость - теперь он собирается без проблем.

Плохая новость - возникает исключение System.AccessViolation: попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена ».

Ставлю точку останова в MX_TipCalc.Forms.UWP.UWP.App.xaml.cs

Публичное приложение () InitializeComponent

после этого он переходит в

    static void Main(string[] args)
    {
        global::Windows.UI.Xaml.Application.Start((p) => new App());
    }

тогда

    /// <summary>
    /// GetXamlType(String)
    /// </summary>
    public global::Windows.UI.Xaml.Markup.IXamlType GetXamlType(string fullName)
    {
        return _AppProvider.GetXamlType(fullName);
    }

После нажатия последней фигурной скобки при ходьбе происходит сбой. Это предел моих знаний :-(

Следующий шаг

Мой последний MainPage.xaml.cs сейчас

namespace MX_TipCalc.Forms.UWP.UWP
{
    public partial class MainPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
    }
}

Сначала я получил сообщение об отсутствии файла Interop.Manual.cs. Несколько раз чистил и пересобирал решение / проекты. В конце концов, это сообщение больше не появилось. Я проверил, что TipCalc.UWP (версия без форм) работает и TipCalc.Forms.Droid работает. Да, они все еще работают, но когда я пробую TipCalc.Forms.UWP, он все еще вылетает в том же месте, что и раньше.


person Alan    schedule 14.12.2018    source источник
comment
Посетите MvvmCross Playground.Forms.Uwp чтобы узнать, как настроить платформу uwp с формами   -  person FabriBertani    schedule 14.12.2018
comment
Спасибо. Скачал Mvvmcross, почистил, было 2 ошибки, построил 237 ошибок. Кажется, не хватает многих файлов DLL. Вы знаете, как я могу восстановить их / загрузить / создать? например MvvmCross-development \ MvvmCross.Forms \ bin \ Debug \ uap10.0.16299 \ MvvmCross.Forms.dll 'MvvmCross-develop \ MvvmCross.Plugins \ JsonLocalization \ bin \ Debug \ netstandard2.0 \ MvvmCross.Plugin. заставить VS2017 получать их откуда-то? Спасибо   -  person Alan    schedule 15.12.2018
comment
Я посмотрел проект Playground.Forms.uwp, в ссылках он ссылается на MvvmCross-develop \ MvvmCross.Plugins \ JsonLocalization \ bin \ Debug \ netstandard2.0 \ MvvmCross.Plugin.JsonLocalization.dll и говорит Resolved: True! Но когда я смотрю на место, то dll там нет!   -  person Alan    schedule 15.12.2018
comment
Удалите : MvxFormsWindowsPage родительский класс из MainPage.   -  person Nico Zhu - MSFT    schedule 19.12.2018
comment
Привет, @Alan, если этот или любой ответ помог решить ваш вопрос, пожалуйста, примите его, щелкнув галочку. Это показывает широкому сообществу, что вы нашли решение, и дает некоторую репутацию как автору, так и вам.   -  person CoCaIceDew    schedule 20.12.2018
comment
Привет, @CoCaIceDew Все еще не удается заставить работать xamarin.forms.uwp :(   -  person Alan    schedule 20.12.2018


Ответы (1)


Я настроил платформу uwp с формами. Пользовательский интерфейс ссылается на эту ссылку < / а>. Вы можете сослаться на следующие шаги.

Добавить TipCalc.Forms.UI ссылку в TipCalc.UWP проект.

введите описание изображения здесь

Замените абстрактный класс TipCalcApp следующим кодом

using MvvmCross.Forms.Platforms.Uap.Core;
using MvvmCross.Forms.Platforms.Uap.Views;
using TipCalc.Forms.UI;

namespace TipCalc.UWP
{
    public sealed partial class App
    {
        public App()
        {
            InitializeComponent();
        }
    }

    //public abstract class TipCalcApp : MvxApplication<MvxWindowsSetup<Core.App>, Core.App>
    //{
    //}
    public abstract class TipCalcApp : MvxWindowsApplication<MvxFormsWindowsSetup<Core.App, FormsApp>, Core.App, FormsApp, MainPage>
    {
    }

}

Измените MainPage xaml как страницу хоста.

<mvxf:MvxFormsWindowsPage
    xmlns:mvxf="using:MvvmCross.Forms.Platforms.Uap.Views"
    x:Class="TipCalc.UWP.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TipCalc.UWP"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    </Grid>

</mvxf:MvxFormsWindowsPage>

Наконец, удалите файл TipView.xaml из TipCalc.UWP проекта. Тогда он заработает.

person Nico Zhu - MSFT    schedule 17.12.2018