MVVM Light:RelayCommand:重用命令还是创建新实例?

时间:2010-08-08 10:29:17

标签: silverlight command mvvm-light

在ViewModel中定义RelayCommand时,通常使用一次 [lazy或在构造函数中]完成(例如,请参阅here)。

但这样安全吗? 如果来自同一实例的多个RelayCommands排队(从GUI上的同一按钮多次单击),并且对于第一个命令' CanExecute '更改为false,其他排队命令也会被取消? 我可以想象这不是正确的行为吗?

2 个答案:

答案 0 :(得分:2)

您的执行操作应该仔细检查命令是否可以执行。 CanExecute是绑定到命令的任何提示,但是您的ViewModel不应该对如何调用执行操作做出任何假设。

答案 1 :(得分:1)

多个命令不会排队。 RelayCommand是数据绑定的,因此它将在UI线程上执行。只有一个UI线程,因此RelayCommand的一个实例必须在输入下一次单击之前完成执行。如果您有长时间运行的操作,通常会禁用命令并启动异步操作或生成后台作业,然后在释放UI时,该命令将在下一次单击处理之前被禁用。