【问题标题】:Caliburn + Xamarin navigationCaliburn + Xamarin 导航
【发布时间】:2016-03-14 15:16:27
【问题描述】:

背景:

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

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

我想知道是否有人对我们应该如何处理应用导航提出了建议。我们的屏幕要求我们在浏览时将一些数据(例如数据库 ID)注入屏幕。目前我们已经通过将数据注入视图并将其传递到视图模型中的视图优先方法来完成此操作,但这并不理想,因为它应该真正进入视图模型,因为它是视图逻辑(对?)。

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

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

问题:

  1. 我们将如何将数据放入视图模型而不是视图中,以使其更易于测试并且更类似于我们的 WPF 应用程序的工作方式?
  2. 这对于移动应用程序是否明智,还是我们应该采用视图优先的方法?如果是这样,什么是可测试的方法?

【问题讨论】:

    标签: mvvm xamarin caliburn.micro


    【解决方案1】:

    除非您已将 Caliburn.Micro 设置为视图优先方法(可以这样做,有一个示例),否则该框架本质上几乎完全是视图模型优先。我发现首先在视图中工作是相当困难的。我的大多数“屏幕”都是围绕相关视图模型开发的。考虑到这一点,我有时也会根据操作(添加/编辑/详细信息/列表)为每个视图模型提供多个视图。

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

    2) 做舒服的事。如果你习惯使用假货,那就去做吧。只要您最终获得所需的正确结果,这无关紧要。当然,我确信每个测试都会针对它们所测试的平台进行轻微调整。由于每个平台都有自己的细微差别,您必须加以考虑。

    【讨论】:

    • 谢谢,您提供了我们正在寻找的清晰度。我们将沿着存储库路线走,因为它现在似乎很有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多