Xamarin: MVVM交叉信息
Posted
技术标签:
【中文标题】Xamarin: MVVM交叉信息【英文标题】:Xamarin: MVVMCross info 【发布时间】:2013-05-15 11:39:06 【问题描述】:在 Xamarin 跨平台应用程序开发中适配 MVVMCross 框架,我们在here 中拥有 PCL(包含模型和视图模型)和视图(针对每个平台)。
a) Xamarin.mobile(用于获得单组 API 访问权限)位于何处?我认为在 PCL 内部。但是,我看到 Xamarin.mobile 的不同二进制文件(例如:android 和 ios),我们是否将所有 Xamarin.mobile 库都放在 PCL 中?都是同名的,不会有冲突吧?
b) 我们将访问蓝牙之类的代码保存在哪里(Xamarin.mobile 中不可用)?使用 MVVMCross 解耦了视图和业务逻辑,那么在事件发生后(btn 点击)创建视图项的所有代码都驻留在视图中吗?
c) 我们在哪里可以使用适应 MVVMCross 的条件编译?我猜在模型中,但它是仅用于文件访问还是也可以通过将其放置在 PCL 上来根据目标平台显示视图项(Android 上的 toast 消息)?
(如果不合适,请原谅,只是收集了一些关于 MVVMCross 和 Xamarin.mobile 的信息,并有一些推理/困惑)
谢谢!
问候, 索拉夫
【问题讨论】:
请尝试对每个问题提出一个问题 - 这有助于人们(如您自己)稍后寻找答案。这真的是 3 个问题。谢谢:) 【参考方案1】:a) Xamarin.mobile(用于获得单组 API 访问权限)位于何处?我认为在 PCL 内部。但是,我看到 Xamarin.mobile 的不同二进制文件(例如:Android 和 IOS),我们是否将所有 Xamarin.mobile 库都放在 PCL 中?都是同名的,不会有冲突吧?
Xamarin.Mobile 不是可移植代码 - 不能直接从 PCL 调用。
对于许多 Xamarin.Mobile 功能(以及许多 Xamarin.Mobile 未涵盖的功能),MvvmCross 提供插件 - 您可以在 https://www.nuget.org/packages?q=mvvmcross 中看到其中的一些功能
对于 X.M 具有但我们尚未包含的其余几个方法 - 例如联系人查找 - 然后您可以:
通过编写可移植接口(外观)访问 Xamarin.Mobile 函数,通过该接口访问它们 编写一个新插件来实现它们有关插件的更多信息:
参见 N=8 - 添加位置插件 - 来自 http://mvvmcross.wordpress.com/ 中的 N+1 个视频 关于编写插件见https://speakerdeck.com/cirrious/plugins-in-mvvmcrossb) 我们将访问蓝牙之类的代码保存在哪里(Xamarin.mobile 中不可用)?
通常这与上面的方法相同。例如,对于蓝牙,请查看 Sphero 示例:
http://blog.xamarin.com/xamarin-developer-showdown-winning-entries-showcase-xamarin-mobile/ https://github.com/slodge/BallControl/tree/master/Cirrious.Sphero.WorkBench/Plugins/Sphero使用 MVVMCross 解耦了视图和业务逻辑,那么在事件发生后(btn 点击)创建视图项的所有代码都驻留在视图中吗?
是的 - 如果它是“视图关注点”,那么它属于视图(这与任何 Mvvm 代码相同)
c) 我们在哪里可以使用适应 MVVMCross 的条件编译?
我尽量不使用“条件编译”,包括#if
和partial classes
。有时我会在特定于插件平台的模块中使用它,但通常我会尝试使用继承或抽象来代替——原因是因为我经常使用“重构”和“单元测试”等工具,而条件编译根本不会使用这些。
有关使用 PCL 而非文件链接和其他基于项目的技术的好处(和坏处)的更多信息,请参阅What is the advantage of using portable class libraries instead of using "Add as Link"?
【讨论】:
非常感谢我正在寻找的准确答案。非常感谢您的帮助。以上是关于Xamarin: MVVM交叉信息的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin MVVM 从另一个页面删除 Listview 项目
Xamarin Forms MvvM框架之FreshMvvM翻译一