获取当前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 的相关文章

  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 在 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 是 活动的 取决于