天天看點

WPF Commanding Overview 的筆記

整個指令系統的流程如下:

commandmanager 負責監聽一些它關注的屬性的更改(例如:focus、click),當界面上有此類事件發生時,它會通知所有的 routedcommand 發生 canexecutedchanged 事件。

這時,已經綁定了這些 routedcomamnd 的 commandsource (主要是各類控件),會調用 routedcommand 的 canexecute 方法來檢測是否可執行,并根據傳回的結果來設定自己的狀态。如,當傳回可執行時,作為 commandsource 的按鈕則會設定自己的 isenabled 屬性為 true。此時,如果使用者“點選”了這個 commandsource 時,它會調用它所綁定的 routedcommand 的 execute 方法。

commandbinding 的主要設計目标是為了在一個較高的邏輯樹節點(例如 window 節點)處,重用固定的指令執行邏輯。也就是說,當我在 window上使用 commandbinding 綁定了某個 routedcommand 的執行邏輯後,所有 window 中的邏輯子結點如果執行了此 routedcommand,則會按照路由順序尋找此 routedcommand 所對應的 commandbinding,找到後,則會執行其綁定的執行邏輯。

這也就是 routedcommand 的命名由來,也說明了,commandbinding 隻能用于綁定 routedcommand。