2011-01-26 182 views
1

我有一個基於MVVM模式的WPF應用程序。它左側有一棵樹,右側有一個細節區域。樹包含各種類型的對象,我有每種類型的視圖模型。在視圖中,我爲每個視圖模型類型都有一個不同的數據模板(包含用戶控件)。然後根據當前詳細信息視圖通過數據綁定選擇視圖。WPF MVVM:視圖模型更改時不重新加載視圖

現在,當我在樹節點之間切換時,我還爲每個節點實例化一個新的細節視圖模型,並且視圖相應地發生改變,同時觸發DataContextChanged事件和Loaded事件。也就是說,直到我開始在相同類型的對象之間切換。在這裏,細節視圖模型也會得到更新,但視圖實例保持不變。這意味着,只有DataContextChanged事件被激發,但不是Loaded事件。

有沒有辦法強制Loaded事件觸發,例如,通過重新初始化視圖?

我需要Loaded事件的原因是WPF在數據綁定期間觸發了輸入控件上的選擇更改事件,並且由於我的邏輯對用戶觸發的選擇更改事件起作用,因此我需要能夠忽略觸發的事件通過數據綁定。目前,Loaded事件似乎是做到這一點的最佳選擇。所描述的問題的除外。

謝謝,邁克爾

+1

聽起來像是一個糟糕的設計,如果您需要任何SelectionChanged事件,您應該能夠將細節視圖直接綁定到所選項目。特別是你需要不同的行爲來綁定選擇的變化聽起來頗爲腥意。除此之外,如果您發佈一些簡化的問題代碼,這將會很有幫助。 – 2011-01-26 11:20:15

+0

請發佈您的代碼,重現上述問題。 – 2011-01-26 13:18:23

回答

0

移動任何邏輯必須在加載的處理程序的DataContextChanged僅處理程序是否需要運行的每個數據環境的變化時間。