2010-07-02 87 views
1

我有一個View(MainView),其中包含一種主要內容區域(MainContent)。該視圖由相應的ViewModel(MainViewModel)支持。當然,主要內容基於應用程序的當前狀態進行更改,並在ViewModel中作爲屬性(CurrentPrimaryViewModel)表示。搜索Maincontent的內容被綁定到CurrentPrimaryViewModel在XAML像這樣:WPF,WVVM,Databinding和ResourceDictionaries

Content="{Binding Path=CurrentPrimaryViewModel}" 

有含一束ViewModel->查看映射的DataTemplates的ResourceDictionary中。因此,如果CurrentPrimaryViewModel是XViewModel類型,則它將解析爲XView。

這一切工作,種。

問題是,每次CurrentPrimaryViewModel改變一個新的View被創建。我想要的是適當映射的View,只需將其DataContext更改爲正確的ViewModel,然後讓View成爲MainContent。基本上像CardStack?來自Java的佈局,或沒有可見標籤的TabControl。

處理這種情況的適當方法是什麼?我是否必須在MainContent包裝下創建各種視圖並切換其可見性或Z順序?這是否有一個好的模式? MainView和MainViewModel之間爲了實現這個目標應該綁定什麼?

回答

0

AFAIK沒有控制可以做到這一點。然而,在我看來,這很容易做到這一點(無知是幸福,你知道)。您只需創建一個自定義的DataTemplateSelector即可緩存您的ContentControls的模板。

+0

我不需要爲知道各種可用DataTemplates的MainContent的每個實例創建一個自定義DataTemplateSelector。我只寫了一個帶有CurrentItemKey依賴項屬性和ItemKey附加屬性的SelectorPanel。 SelectorPanel只是循環遍歷子控件,並根據ItemKey是否匹配CurrentItemKey切換其可見性。 這是粗略的,但它的工作原理。 – od9 2010-07-02 19:52:58

+0

@ od9一個datatemplate與一個類型匹配。因此,您只需創建一個DataTemplateSelector作爲資源,並在需要共享模板實例的任何地方使用它。在DTS中,您只需保存一個類型/模板實例的字典,並將它們新建或發送出去。 – Will 2010-07-03 16:19:17