Caliburn + Xamarin导航

时间:2015-12-09 11:08:56

标签: mvvm xamarin caliburn.micro

背景

我们正在使用带有WPF + Xamarin iOS / Android项目的Caliburn.Micro 3.0.0-beta2,我们希望确保视图模型可以跨平台重用尽可能多的代码。

我们一直在研究如何将我们的导航抽象为可测试,跨平台且可在视图模型中调用,而不是视图。

我想知道是否有人对如何处理我们的应用导航有任何建议。我们的屏幕要求我们在我们浏览时将一些数据(如数据库ID)注入屏幕。目前我们已经通过将第一种方法注入视图并将其传递到视图模型中来实现这一点,但这并不理想,因为它应该真正进入视图模型,因为它& #39; s视图逻辑(对吗?)。

使用ViewModelLocator.LocateForView(this);为视图视图创建视图模型,然后使用SimpleContainer满足其余的依赖项。

我们了解到导航尚未根据https://github.com/Caliburn-Micro/Caliburn.Micro/issues/142实施到3.0.0中。我们正在寻找一种可以进行导航的方式,这种方式可能与即将实施的Caliburn.Micro解决方案类似,并希望尽可能为此做出贡献。

问题:

  1. 我们如何将数据放入视图模型而不是视图中,以便更容易测试,更类似于我们的WPF应用程序需要如何工作?
  2. 这对于移动应用是否合情合理,还是我们应该先采取观点?如果是这样,那么这将是一种可测试的方法?

1 个答案:

答案 0 :(得分:1)

除非你已经为View-first方法设置了Caliburn.Micro(可以为此做一个示例),否则框架几乎完全是viewmodel。我发现首先工作起来相当困难。我的大多数“屏幕”是围绕视图模型开发的。考虑到这一点,我有时根据操作(添加/编辑/详细信息/列表)为每个视图模型提供多个视图。

1)DI,通常通过存储库或其他具有该性质的上下文,然后使用BindableColllection来保存和通知视图的更改。与WPF几乎相同。最近我的代码已经开始跨平台(WP到WPF,现在更通用),以帮助减少我的头痛。使用的大多数模式是DI(SimpleContainer),Repository(EF 6x),Pub / Sub(IEventAggregator)。唯一的例外是Repository但是在某种程度上我仍然在WP上使用它,但是因为我使用Sqlite,直到最近EF才是不可能的(EF 7拯救)......

2)做舒适的事。如果您习惯使用Fakes,那就去做吧。只要你最终得到正确的结果就没关系。当然,我确信每个测试都会针对他们测试的平台稍微调整一下。由于每个平台都有自己的细微差别,您必须考虑到这一点。