在ViewModel中定义RelayCommand时,通常使用一次 [lazy或在构造函数中]完成(例如,请参阅here)。
但这样安全吗? 如果来自同一实例的多个RelayCommands排队(从GUI上的同一按钮多次单击),并且对于第一个命令' CanExecute '更改为false,其他排队命令也会被取消? 我可以想象这不是正确的行为吗?
答案 0 :(得分:2)
您的执行操作应该仔细检查命令是否可以执行。 CanExecute是绑定到命令的任何提示,但是您的ViewModel不应该对如何调用执行操作做出任何假设。
答案 1 :(得分:1)
多个命令不会排队。 RelayCommand是数据绑定的,因此它将在UI线程上执行。只有一个UI线程,因此RelayCommand的一个实例必须在输入下一次单击之前完成执行。如果您有长时间运行的操作,通常会禁用命令并启动异步操作或生成后台作业,然后在释放UI时,该命令将在下一次单击处理之前被禁用。