我想知道为什么MVVM光缺少命令与异步执行?我相信在很多情况下这可能会有用,所以让我说一个.
假设我们的UI包含一个包含多个屏幕的容器.用户可以关闭特定屏幕或具有多个屏幕的容器.假设用户已在容器上发出了关闭命令.返回的容器在每个屏幕上调用close命令,它需要等待屏幕关闭.实际上,这可能意味着验证数据.因此,我们需要发出异步调用以防止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
}
}
}) }
}
Run Code Online (Sandbox Code Playgroud)
我们还可以在屏幕上公开其他方法,但在我看来它应该是RelayCommand的任务,因为它已经存在于那里.
或者有一种不同的方法来处理这种情况?
可能是因为有很多不同的方法;我在有关该主题的 MSDN 文章中描述了一些方法。
异步生命周期命令尤其棘手。必须仔细考虑诸如“关闭”命令之类的命令。是否有迹象表明关闭正在进行中?如果用户多次关闭(特别是“关闭”通常可以由操作系统或另一个应用程序启动,即使“关闭按钮”被禁用),会发生什么?
| 归档时间: |
|
| 查看次数: |
5652 次 |
| 最近记录: |