MVVMCross Xamarin.Forms.UWP с TipCalc - PullRequest
       30

MVVMCross Xamarin.Forms.UWP с TipCalc

0 голосов
/ 14 декабря 2018

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

В VS2017 с удовольствием создаем проекты для Android, Ios и UWP с общим проектом форм Xamarin.

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

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

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

Приложение.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>

My App.xaml.cs is

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>
    {
    }
}

My MainPage.xaml is

<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>

Мой MainPage.xaml.cs

   using MvvmCross.Forms.Platforms.Uap.Views;

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

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

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

Я поставил точку останова в MX_TipCalc.Forms.UWP.UWP.App.xaml.cs

Public App () 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 (не версия Forms) работает и что TipCalc.Forms.Droid работает. Да,они все еще работают, но когда я пытаюсь использовать TipCalc.Forms.UWP, он все равно вылетает в том же месте, что и раньше.

1 Ответ

0 голосов
/ 17 декабря 2018

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

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

enter image description here

Замените абстрактный класс 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. Тогда он будет работать.

...