【发布时间】:2015-02-26 06:01:57
【问题描述】:
我想知道为什么 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 的任务,因为它已经存在。
或者有不同的方法来处理这种情况?
【问题讨论】:
标签: c# mvvm mvvm-light