2011-09-19 134 views
0

我有TabControl有兩個選項卡:主要時間和附加時間。主視圖模型包含主要小時數和附加小時數作爲屬性,第一個選項卡綁定到主要小時數,第二個選項卡 - 額外小時數。每個小時都有一個明確的命令(從PrismDelegateCommand)。在TabControl的頂部有一個命令「全部清除」(CompositeCommand)的按鈕。在主視圖模型的構造函數中創建小時。WPF TabControl綁定問題

問題:從附加小時

命令不存在的原因,他們沒有參與指揮「全部清除」和按鈕「全部清除」未啓用,直到我選擇第二個選項卡(在第一個標籤沒有什麼可以清除的,但是在這個標籤上)。

我試圖禁用虛擬化TabControl但它並沒有幫助我。同樣在加載數據後,我每小時撥打clearCommand.RaiseCanExecuteChanged

更新: 當我在調試器中遍歷數小時,並觀察命令是否可以執行,這一切都很好,UI更新正常。但沒有調試器,它不是。

+0

爲什麼在你還沒有選擇標籤的時候,第二個標籤上有什麼要保存的東西?你不需要改變某些東西來拯救某些東西嗎?你不必選擇標籤來改變一些東西嗎? – PVitt

+0

@PVitt:1.是的; 2.不要;不要。第一個標籤是空的(沒有數據),第二個標籤有可以保存的數據。實際上它是保存命令,但我更新了文章並將命令重命名爲「清除」以便充分理解。 –

回答

0

我不知道我理解你正確,但有兩件事我能想到的,可能會導致你的設計不尋常的行爲

  1. 棱鏡的DelegateCommand不會自動重新查詢CanExecute如果一個參數變化。爲了驗證這是否是您的問題或沒有,我會切換到使用某種類型的RelayCommand ....我經常使用Galasoft's MVVM LightRelayCommand當我想一個命令自動重新評估它的CanExecute當參數改變

  2. 默認情況下,WPF卸載不可見的TabItems。因此,如果SaveAllButton.Enabled屬性基於Tab1.SaveButton.EnabledTab2.SaveButton.Enabled,則Tab2有一些要保存的內容,但Tab1不會,並且Tab1有焦點,則SaveAll按鈕將被禁用,因爲Tab2不可見,因此未加載。要測試是否屬於這種情況,請切換到使用類似ListBox的東西。如果是這種情況,您可以使用代碼here來防止TabControl卸載不可見的選項卡。

+0

有用的鏈接,但它沒有幫助我。在loadind數據後,我會在所有時間調用'RaiseCanExecuteChanged',所以這個標記不在'DelegateCommand'中(我想,但我會嘗試'RElayCommand')。 –

+0

@JohnKZ你有沒有嘗試過一個'TabControl'以外的東西?你的問題可能是該選項卡沒有加載,直到它被選中(#2) – Rachel

+0

:謝謝你雷切爾。我刪除了'TabControl'並且不使用'ListBox'。我只是更改佈局的「可見性」屬性,並使用「RadioButton」更改可見佈局。 –