获取当前ViewModel MvvmCross

2024-02-04

奇怪的是,我在互联网上没有找到这个非常简单的问题的直接答案。

如何确定当前处于活动状态ViewModel in MvvmCross运行?

是否可以?如果不是,为什么我不应该这样做?


正如我最近了解到的,哪个 ViewModel 是“活动的”取决于heavily您使用的 Presenter 上。如果您只使用默认的演示者,这似乎很容易,因为在任何给定时间只显示一个 ViewModel。但是,使用更高级的演示者,您可以拥有多个活动 ViewModel。

由于当前活动的 ViewModel 取决于您正在使用的 Presenter(位于视图层),因此 Mvx 核心无法知道如何访问它/它们。如果这是您认为需要的东西,我建议您使用自己的界面实现自己的 Presenter。

这是 iOS 的示例:

ICurrentViewModelPresenter.cs

public interface ICurrentViewModelPresenter
{
    IMvxViewModel CurrentViewModel { get; }
}

当前ViewModelPresenter.cs:

public class CurrentViewModelPresenter : MvxTouchViewPresenter, ICurrentViewModelPresenter
{
    public CurrentViewModelPresenter(UIApplicationDelegate del, UIWindow win)
        : base(del, win)
    {
    }

    public IMvxViewModel CurrentViewModel
    { 
        get
        {
            var viewController = MasterNavigationController.TopViewController;
            if (viewController == null) return null;

            var touchView = viewController as IMvxTouchView;
            if (touchView == null) return null;

            return touchView.ReflectionGetViewModel();
        }
    }
}

安装程序.cs:

public class Setup : MvxTouchSetup
{
    private readonly MvxApplicationDelegate _del;
    private readonly UIWindow _win;

    public Setup(MvxApplicationDelegate del, UIWindow win)
        : base(del, win)
    {
        _del = del;
        _win = win;
    }

    ...

    protected override IMvxTouchViewPresenter CreatePresenter()
    {
        var presenter = new CurrentViewModelPresenter(_del, _win);

        Mvx.RegisterSingleton<ICurrentViewModelPresenter>(presenter);

        return presenter;
    }
}

代码中的任何位置:

var presenter = Mvx.Resolve<ICurrentViewModelPresenter>(); // or inject with IoC
var current = presenter.CurrentViewModel;

请注意,这些都没有经过测试,但它应该让您了解它是如何工作的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取当前ViewModel MvvmCross 的相关文章

随机推荐

  • 在 matplotlib 中打开灯

    我有以下Python代码 import numpy as np from matplotlib import pyplot as plt plt rcParams figure figsize 12 7 n 100 m 100 X np a
  • 在 Xcode 中打开权利会阻止 Bare Bones 应用程序启动

    我在 Xcode 4 2 中创建了一个基本应用程序 非常简单的应用程序 我没有改变任何东西 按下运行 您将获得标准的基本应用程序窗口 如果我打开目标的权利并点击运行 我不会收到任何调试器错误 但窗口永远不会出现 我使用 Console ap
  • 当关联计数更改时强制更新 NSFetchedResultsController

    我有一个 NSFetchedResultsController 它在表视图中显示项目列表 包括关联实体的计数 当为此关联添加对象时 使用 addXXXObject 不会调用回调来通知我的控制器更新 如何接收对象被添加到父实体的 NSSet
  • Java Beans Binding 的状态如何?

    我发现一篇旧文章http www artima com lejava articles beans binding html http www artima com lejava articles beans binding html以及一
  • 针对单个客户端请求并行多个数据库查询

    为了完成用户的某些请求 在我的应用程序中 我从单个方法发出多个数据库查询 但它们当前正在按顺序执行 因此应用程序被阻止 直到它收到前一个查询的响应 数据 然后继续下一个查询 这不是我很喜欢的事情 我想发出并行查询 另外 在发出查询之后 我想
  • 使用 ffmpeg 在同一张图像上使用两次淡入/淡出

    我使用此命令在流开始 5 秒后淡入徽标 并在 25 秒后淡出 如下所示 ffmpeg re i test mp4 ignore loop 0 i logo gif filter complex 1 v fade in st 5 d 1 al
  • 在 QML 中截取特定项目的屏幕截图的方法是什么?

    我知道如何在 QML 中截取整个窗口的屏幕截图 https stackoverflow com questions 33165733 qquickwindowgrabwindow scene graph already in use lq
  • “onclick”不适用于具有 svg-image 的对象元素[重复]

    这个问题在这里已经有答案了 当我使用onclick的属性object html 文档中的元素 它不响应点击 在我的文档中 我有一个 svg 图像并将其存储在object element 因为图像中存在一些动画 仅使用img tag 在下面的
  • Silverlight:画布溢出

    我创建了一个 Canvas 并在其中放置了一个 StackPanel StackPanel 是水平的 它接受缩略图列表 画布有固定的大小 当我放置的缩略图数量超过 Canvas 宽度可以容纳的数量时 StackPanel 应该会从 Canv
  • 如何在运行时向角色添加动画控制器?

    我在 Assets Resources System PLController 中有一个 Animator 控制器 我必须在运行时使用脚本添加它 如何实现这一点 使用Unity 5 5 3 0f4 PLController 动画控制器 首先
  • CMake 中的 CMAKE_SOURCE_DIR 和 PROJECT_SOURCE_DIR 是否相同?

    这一页 https gitlab kitware com cmake community wikis doc cmake Useful Variables包含 CMake 已经为我们定义的变量的良好摘要 我觉得有些变量是相同的 举个例子CM
  • 即使任务启动后,AsyncResult(task_id)也会返回“PENDING”状态

    在项目中 我尝试轮询长时间运行的任务的task state并更新其运行状态 它在开发中有效 但当我将项目移动到生产服务器上时它不起作用 即使我可以看到任务在花上开始 我仍然收到 待处理 消息 但是 当任务完成时 当task state SU
  • 省略 Access 报告最后一页的页眉?

    如何删除 Access 报告最后一页上的标题 将组添加到报告中 根据表达式进行分组 True 这将创建一个包含报告中所有记录的组 为该组提供组标题 然后将列标题标签从页标题移动到组标题 在组标题的属性中 设置Repeat Section t
  • Excel XY 图表(散点图)数据标签无重叠

    So I ve been working on this for the past week Although it can t do miracles I can say I ve got a pretty good result I j
  • API 10 编译错误

    我遵循developers android com 上的基本教程 并创建了名为DisplayMessageActivity 的活动 这是一个空白活动 其中给出了教程中所示的所有规范 仅供参考 我使用 Min SDK API 8 Target
  • 使用 pandas 从 Google Cloud Storage 读取 CSV 文件

    我正在尝试将一堆 CSV 文件从 Google Cloud Storage 读取到 pandas 数据帧中 如中所述将 csv 从 Google Cloud 存储读取到 pandas 数据框 https stackoverflow com
  • LINQ 和实体框架 Code First 中的 SQL 子查询结果

    我想要进行一个查询 该查询将返回我的实体以及它们的一些关联实体 例如 select select COUNT from Forms where Contact Id Contacts Id as FormsCount from Contac
  • 基于 cocos2d-box2d 的项目中出现“'uniqueIdentifier' is deprecated”警告

    我基于cocos2d box2d创建一个新项目 两个文件中总是有4个警告 一个是CLScoreServerPost m 代码有警告如下 self addValue UIDevice currentDevice uniqueIdentifie
  • 防止 iCloud 备份文件夹

    我最近因 NSLibraryDirectory 将错误类型的数据备份到 iCloud 而被拒绝 我试图阻止整个目录备份到 iCloud 因为该目录除了下载的内容外不包含任何内容 AppDelegate m 中的这段代码可以工作吗 NSStr
  • 获取当前ViewModel MvvmCross

    奇怪的是 我在互联网上没有找到这个非常简单的问题的直接答案 如何确定当前处于活动状态ViewModel in MvvmCross运行 是否可以 如果不是 为什么我不应该这样做 正如我最近了解到的 哪个 ViewModel 是 活动的 取决于