我想知道为什么 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(使用前将#替换为@)