2010-08-08 54 views
0

在ViewModel中定義RelayCommand時,通常使用一次 [懶惰或在構造函數中](例如參見here)完成。MVVM Light:RelayCommand:重用該命令還是創建一個新實例?

但這是安全的嗎? 如果來自同一實例的多個RelayCommand排隊(GUI上的同一按鈕多次點擊),並且對於第一個命令「CanExecute」更改爲false,其他排隊的命令是否也會被取消? 我可以想象這不正確的行爲?

回答

1

多個命令不會排隊。 RelayCommand是數據綁定的,因此它將在UI線程上執行。只有一個UI線程,因此RelayCommand的一個實例必須在輸入下一次單擊之前完成執行。如果您有長時間運行的操作,通常會禁用命令並啓動異步操作或產生後臺作業,然後在釋放UI時,在下一次單擊處理之前該命令已被禁用。

+0

謝謝你的解釋。 – 2010-08-08 21:21:00

2

您的執行操作應仔細檢查命令是否可以執行。 CanExecute是任何綁定到命令的提示,但是你的ViewModel不應該對如何調用執行動作做任何假設。

+0

是的,CanExecute絕對只是一個提示。如果您點擊的速度夠快,可以進入CanExecute爲false的狀態,但該操作的執行仍然被調用。 – Christo 2010-08-08 14:17:21

相關問題