MvvmCross MvxWindowsPage 编译错误
我正在使用MvvmCross框架编写Xamarin.iOS
, Xamarin.Android
和UWP
跨平台应用程序。
我正在创建一个具有LoginViewModel的LoginPage。 在Xamarin.iOS
, Xamarin.Android
项目中,ViewModel和View的绑定与下面的工作正常
public class LoginActivity : MvxAppCompatActivity
public partial class LoginViewController : MvxViewController
尝试在UWP
项目上执行与上面相同的操作,我收到一些错误。
在XAML中:
我的C#代码是
public sealed partial class LoginView : MvxWindowsPage
但我得到编译错误。 我该如何解决?
我认为错误有点模棱两可,因为在第一个错误中没有模板化版本,但第三个错误是关于模板约束违规。
我知道有一个选项将ViewModel和View绑定到命名约定或属性,但我想使用这种强类型解决方案。
不幸的是,我认为UWP不支持TypeArguments
,也不支持基页的generics类型参数。 您可以在他们讨论的地方查看Prism GitHub线程 。 因此,您必须使用其他注册选项之一。
Mvvmcross提供了各种替代方法,用于将View
注册到ViewModel
。 在Mvvmcross初始化期间,它将尝试按以下顺序使用MvxViewModelViewTypeFinder
将ViewModel
注册到View
:
基于属性的注册:
您可以将MvxViewFor
属性添加到页面类中。
[MvxViewFor(typeof(FirstViewModel))] public sealed partial class FirstView : MvxWindowsPage { public FirstView() { this.InitializeComponent(); } }
基于混凝土类型的注册
您可以通过指定ViewModel
的具体类型将View
注册到ViewModel。
public sealed partial class FirstView : MvxWindowsPage { public new FirstViewModel ViewModel => base.ViewModel as FirstViewModel; public FirstView() { this.InitializeComponent(); } }
或者在Android和iOS的情况下,可以使用通用基类:
// Android public class FirstActivity : MvxAppCompatActivity // iOS public class FirstViewController : MvxViewController
基于公约的登记:
您可以让您的视图和ViewModel遵循相同的命名约定,Mvvmcross将为您映射它们(xxxView和xxxViewModel)
视图
public sealed partial class FirstView : MvxWindowsPage { public FirstView() { this.InitializeComponent(); } }
视图模型
上述就是C#学习教程:MvvmCross MvxWindowsPage 编译错误分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public class FirstViewModel : MvxViewModel
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1014775.html