我有一個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之間爲了實現這個目標應該綁定什麼?
我不需要爲知道各種可用DataTemplates的MainContent的每個實例創建一個自定義DataTemplateSelector。我只寫了一個帶有CurrentItemKey依賴項屬性和ItemKey附加屬性的SelectorPanel。 SelectorPanel只是循環遍歷子控件,並根據ItemKey是否匹配CurrentItemKey切換其可見性。 這是粗略的,但它的工作原理。 – od9 2010-07-02 19:52:58
@ od9一個datatemplate與一個類型匹配。因此,您只需創建一個DataTemplateSelector作爲資源,並在需要共享模板實例的任何地方使用它。在DTS中,您只需保存一個類型/模板實例的字典,並將它們新建或發送出去。 – Will 2010-07-03 16:19:17