MVVM light 中的异步命令执行

2024-06-22

我想知道为什么 MVVM light 缺少异步执行命令?我相信在很多情况下这都是有用的,所以让我举一个例子。

假设我们的 UI 包含一个包含多个屏幕的容器。用户可以关闭特定屏幕或具有多个屏幕的容器。假设用户已对容器发出关闭命令。容器反过来在每个屏幕上调用关闭命令,并且需要等待屏幕关闭。这实际上意味着验证数据。因此,我们需要发出异步调用以防止 UI 变得无响应,并且我们还需要等待任务完成才能继续。

所以,如果我们在 Command 中有这样的东西

public RelayCommand CloseCommand
{
    get { return _closeCommand ?? _closeCommand = new RelayCommand( async () =>
    {
        foreach (var screen in Screens)
        {
            if (!await screen.CloseCommand.ExecuteAsync(null))
            {
                // do something
            }
        }
    }) }

}

我们还可以在屏幕上公开其他方法,但在我看来,它应该是 RelayCommand 的任务,因为它已经存在于屏幕上。

或者有不同的方法来处理这种情况?


可能是因为有很多不同的方法;我描述了一些方法我关于这个主题的 MSDN 文章 http://msdn.microsoft.com/en-us/magazine/dn630647.aspx.

异步生命周期命令尤其棘手。必须仔细考虑诸如“关闭”命令之类的命令。是否有迹象表明关闭正在进行中?如果用户多次关闭(特别是“关闭”通常可以由操作系统或另一个应用程序启动,即使“关闭按钮”被禁用),会发生什么?

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

MVVM light 中的异步命令执行 的相关文章

  • 如何获取mp3曲目的时长?

    我想问一下如何在应用程序中获取音频文件的长度 我正在像这样加载曲目 var installFolder Windows ApplicationModel Package Current InstalledLocation var resou
  • static const 和 constexpr 变量有什么区别? [复制]

    这个问题在这里已经有答案了 我明白 一个constexpr variable可以在编译时使用 对于模板 或者例如 static assert 但如果我想在没有 constexpr 的情况下做到这一点 我可以static const 自从 C
  • 忽略控制器参数缺失导致的异常

    我有一个使用 MVC4 构建的面向互联网的网站 我偶尔会收到来自机器人或好奇的用户发送不完整 URL 请求的错误报告 例如 public class ProductController Controller HttpGet public v
  • C# 参数隐式转换

    有这个代码 class Program static void Main string args Check 3 Console ReadLine static void Check int i Console WriteLine I am
  • clangd 中有“includePath”选项吗?

    我曾经使用 VSCodeC C https marketplace visualstudio com items itemName ms vscode cpptools扩大 这个扩展中有一个功能 在 json 文件中 称为 includeP
  • 如何终止从cin读取?

    我已经尝试了这里列出的一堆方法 但没有一个起作用 它总是在等待更多的输入 我试过了while std getline std cin line 和下面的方法 似乎没有任何作用 include
  • 以编程方式解析和编辑 C++ 源文件

    我想以编程方式解析和编辑 C 源文件 我需要更改 添加代码的某些部分 即函数 类块等 中的代码 我也 最好 能够得到评论 我想做的部分事情可以用下面的代码来解释 CPlusPlusSourceParser cp new CPlusPlusS
  • 使用自定义源增强 Iostreams zlib_error

    我正在尝试使用zlib decompressor通过一个解压缩数据istreambuf iterator 我找不到使用输入迭代器作为流的输入的内置方法 如果已经存在 请指出一种方法 所以我写了这个源代码 template
  • x64 DLL 导出函数名称

    我正在尝试将 32 位 dll 和应用程序 移植到 64 位 并且我成功地构建了它而没有错误 当尝试使用我的 64 位应用程序加载它时 我注意到导出的函数名称不同 这就是我导出函数的方式 ifdef cplusplus extern C e
  • 如何使用鼠标指针和键盘快捷键捕获文本?

    我想使用 C 或 java 使用鼠标指针和键盘快捷键从打开的窗口捕获文本 喜欢babylon http babylon com 所以 我需要知道什么以及如何实施 我需要使用哪些库 或者我可以使用 winapi 吗 使用脚本语言创建您想要执行
  • 如何更改 gdb 中的值

    所以我有这个家庭作业代码 我必须使用 gdb 进行调试 我发现了问题 但不知道如何使用gdb来改变它 define ARRAYSIZE 12 for i ARRAYSIZE 2 i gt 0 i for j i j lt ARRAYSIZE
  • 在所有 DataTable 列中查找字符串

    我正在尝试找到一种快速方法来在所有数据表列中查找字符串 跟随不起作用 因为我想在所有列值中搜索 string str whatever foreach DataRow row in dataTable Rows foreach DataCo
  • 错误:非聚合类型“vector”无法使用初始值设定项列表进行初始化

    我是 C 的初学者 每次跑步时vector
  • 为什么函数不能跟在 Main 之后

    为什么我不能在 main 之后放置一个函数 Visual Studio 无法构建程序 这是 C 怪癖还是 Visual Studio 怪癖 eg int main myFunction myFunction 会产生 main 无法使用 my
  • 将 make_shared 与可变参数模板绑定

    我正在尝试编写以下工厂类 但找不到正确的语法 template
  • 如何搜索来自另一个页面模型的串联名称列表?

    我的项目中有多个模型 但在下面的屏幕中 大多数字段 属性都位于 SecurityLog 模型中 下面是我显示的官员串联列表 除了军官姓名之外 我的搜索和列标题排序功能正常 我很难合并官员姓名 因为该列表来自另一个页面模型 这是我的数据库架构
  • 如何在网络浏览器中打开 Excel?

    单击按钮时我需要在网络浏览器中打开 Excel 如何在 asp net 中执行此操作 您无法在客户端 浏览器 计算机上控制和启动软件 为什么 安全 如果这是可能的话 黑客早就接管了所有计算机 你能解释一下吗exactly你想做什么 如果您解
  • C# 如何更改 windows.forms.listview 中的网格线颜色

    如何更改 windows forms listview 中的网格线颜色 我认为没有办法在不覆盖 Paint Event 的情况下在列表视图上执行此操作 但是 如果您能够切换到网格视图 您可以这样做 this dataGridView1 Gr
  • HTTPS文件下载C#

    我需要下载隐藏在 HTTPS 连接后面的文件 我对下载安全网站后面的文件不熟悉 我尝试使用凭据来解决此问题 但无济于事 据我所知 您需要创建并使用证书来完成此操作 但我没有找到任何示例 任何帮助表示赞赏 这就是我现在所拥有的 WebClie
  • 为什么对于某些数组 A,sizeof(A) 在函数内不起作用? [复制]

    这个问题在这里已经有答案了 下列 include

随机推荐