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

Silverlight MVVM Light:RelayCommand:重用命令还是创建新实例?,silverlight,command,mvvm-light,Silverlight,Command,Mvvm Light,在ViewModel中定义RelayCommand时,通常使用一次[lazy or in constructor](参见示例) 但这安全吗? 如果来自同一实例的多个RelayCommand排队(从GUI上的同一按钮多次单击),并且对于第一个命令,“CanExecute”更改为false,那么其他排队的命令也会被取消吗? 我可以想象这不是正确的行为吗 执行操作应仔细检查命令是否可以执行。CanExecute是对绑定到命令的任何内容的提示,但是ViewModel不应该对执行操作的调用方式做出任何假设

在ViewModel中定义RelayCommand时,通常使用一次[lazy or in constructor](参见示例)

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

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

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

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

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

是的,CanExecute肯定只是一个提示。如果你点击的速度足够快,你可以进入这样一种状态:CanExecute为false,但是动作的execute仍然被调用。是的,CanExecute肯定只是一个提示。如果您足够快地单击,您可以进入CanExecute为false的状态,但操作的execute仍被调用。感谢您的解释。感谢您的解释。