【发布时间】: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