【问题标题】:MVVMCross Xamarin.Forms.UWP with TipCalcMVVMCross Xamarin.Forms.UWP 与 TipCalc
【发布时间】:2018-12-14 15:27:32
【问题描述】:

VS2017 版本 15.9.3,Xamarin Forms 3.4,Mvvmcross 6.2.2

在 VS2017 中,很高兴使用通用 Xamarin 表单项目生成 Android、Ios 和 UWP 项目。

我有兴趣使用 MVVMCross 来支持 MVVM 并减少样板代码。

MVVMCross 网站提供了有关如何制作 UWP TipCalc 而不是与 Android 和 Ios 共享 UI 代码的 Xamarin.Forms.UWP TipCalc 的教程。

我认为如果我采用 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 挂钩以使其工作?

谢谢

所以在 Nico Zhu 的回答之后 - MSFT 我的 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>

我的 MainPage.xaml.cs 是

   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 中放了一个断点

Public App() 初始化组件

然后它转到

    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 时,它仍然像以前一样在同一个地方崩溃。

【问题讨论】:

  • 查看MvvmCross Playground.Forms.Uwp 了解如何使用表单配置 uwp 平台
  • 谢谢。下载 Mvvmcross,清理它,有 2 个错误,构建它 237 错误。似乎缺少很多 dll 文件。你知道我怎样才能恢复/下载/创建那些吗?比如 MvvmCross-develop\MvvmCross.Forms\bin\Debug\uap10.0.16299\MvvmCross.Forms.dll' MvvmCross-develop\MvvmCross.Plugins\JsonLocalization\bin\Debug\netstandard2.0\MvvmCross.Plugin.JsonLocalization.dll' 怎么样我是否强制 VS2017 从某个地方获取这些内容?谢谢
  • 我查看了 Playground.Forms.uwp 项目,在参考文献中它指的是 MvvmCross-develop\MvvmCross.Plugins\JsonLocalization\bin\Debug\netstandard2.0\MvvmCross.Plugin.JsonLocalization。 dll 并说已解决:是的!但是当我查看位置时,dll不存在!
  • 请从MainPage中删除: MvxFormsWindowsPage父类。
  • 嗨@Alan,如果这个或任何答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您找到了解决方案,并为回答者和您自己赢得了一些声誉。

标签: xamarin xamarin.forms uwp mvvmcross


【解决方案1】:

我已经配置了带有表单 ui 的 uwp 平台,参考这个link。您可以参考以下步骤。

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>

最后,从TipCalc.UWP项目中删除TipView.xaml文件。然后就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多