我想知道为什么MVVM Light没有异步执行命令?我相信有很多情况下这会很有用,让我举个例子。
假设我们的UI包含一个容器,其中包含多个屏幕。用户可以关闭特定的屏幕或包含多个屏幕的容器。假设用户已经在容器上发出了关闭命令。容器会调用每个屏幕上的关闭命令,并且需要等待屏幕关闭。实际上,这可能意味着验证数据、保存等操作。因此,我们需要发出异步调用以防止UI变得无响应,并且我们需要等待任务完成,才能继续进行。
所以,如果我们在命令中有这样的内容:
我们也可以在屏幕上暴露其他方法,但在我看来,这应该是RelayCommand的任务,因为它已经存在于那里。
或者有一种不同的方法来处理这种情况吗?
假设我们的UI包含一个容器,其中包含多个屏幕。用户可以关闭特定的屏幕或包含多个屏幕的容器。假设用户已经在容器上发出了关闭命令。容器会调用每个屏幕上的关闭命令,并且需要等待屏幕关闭。实际上,这可能意味着验证数据、保存等操作。因此,我们需要发出异步调用以防止UI变得无响应,并且我们需要等待任务完成,才能继续进行。
所以,如果我们在命令中有这样的内容:
public RelayCommand CloseCommand
{
get { return _closeCommand ?? _closeCommand = new RelayCommand( async () =>
{
foreach (var screen in Screens)
{
if (!await screen.CloseCommand.ExecuteAsync(null))
{
// do something
}
}
}) }
}
我们也可以在屏幕上暴露其他方法,但在我看来,这应该是RelayCommand的任务,因为它已经存在于那里。
或者有一种不同的方法来处理这种情况吗?