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 的不同二进制文件(例如:androidios),我们是否将所有 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-mvvmcross

b) 我们将访问蓝牙之类的代码保存在哪里(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 的条件编译?

我尽量不使用“条件编译”,包括#ifpartial 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。列表视图仍然为空

Xamarin 中的 MVVM 绑定

Xamarin Forms MvvM框架之FreshMvvM翻译一

Xamarin 形成 MVVM Stacklayout 内容绑定

在 Xamarin.Forms 项目中实现 MVVM