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中设置了一个断点
公共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时,它仍然在与以前相同的位置崩溃。
答案 0 :(得分:1)
我已经配置了uwp平台,其表单ui引用了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文件。然后它将起作用。