2010-08-17 66 views
0

我正在使用WPF和MVVM模式的樹結構。我從創建20個根節點開始,並在每個節點被點擊時延遲加載子節點。舉例來說,如果我有以下內容:我可以在MVVM模式中禁止「CanExecute」調用

Level 1 
    Level 1.1 
Level 2 
Level 3 
    Level 3.1 
    Level 3.2 

級別1,2和3在運行時加載。級別1.1,3.1和3.2將不會被加載,直到他們各自的父母被點擊。級別低於1.1等,通過點擊他們的父母以相同的方式加載。

我的問題是,當我點擊Level 1.1加載它的子項時,爲Level 1.1和Level 1.1的每個子項的所有根級別項目檢查了「CanExecute」方法。如果有很多孩子,這會造成很多浪費時間。

我的問題是,我可以以某種方式抑制對「CanExecute」的調用?我不需要將它稱爲這些子級別,我想繞過它。我對MVVM框架非常陌生,所以我不確定這是否可能。

回答

1

如果您在視圖模型中使用Prism(WPF和SilverLight的複合應用程序指導)'DelegateCommand',則只要您希望在其上調用CanExecute,就必須顯式調用command.RaiseCanExecuteChanged。

+0

不幸的是,我們沒有使用棱鏡。我們正在使用Unity框架。我應該在我的問題中澄清。 – 2010-08-18 02:26:44

+0

您不需要使用Prism來使用DelegateCommand。您可以從源代碼或Interwebs上的任何其他DelegateCommand實現中抽取它。這是一個非常簡單的課程。 這就是說,這是不足以解決你的「問題」。這是因爲無論CanExecuteChanged事件如何,WPF都會調用「CanExecute」。 我把「問題」放在引號中,因爲我質疑它是否真的有問題。如果你的CanExecute的實現是快速和小型的(它應該是),它應該沒關係。通過將呼叫禁止到CanExecute中,您試圖解決什麼問題? – 2010-08-18 12:07:45

+0

布賴恩是正確的,你不需要使用棱鏡來使用DelegateCommand。但是,從圖書館中抽出東西並隨時隨地使用它幾乎總是一個維護問題。 這就是說我採取我的聲明,你將不得不顯式調用RaiseCanExecuteChanged的CanExecute被調用,回不正確。我的棱鏡應用的結構是這樣的,但不一定總是如此。 – NVM 2010-08-18 12:33:22

相關問題