2009-07-21 107 views
3

我有兩個ViewModel向不同視圖呈現相同的模型。一個將模型作爲ListBox中的項目呈現,另一個將其作爲TabControl中的選項卡呈現。 TabControl用於顯示在ListBox中選擇的項目的選項卡,以便選項隨選擇更改而變化。在ViewModels之間共享狀態

我可以很容易地通過添加IsSelected財產示範和的ViewModels綁定到它(有點像this)同步兩個控件,但這樣會擾亂與表現的細節不真正屬於那裏的模型。

看來我需要Model和ViewModels之間的東西來保持這個額外的狀態。有沒有什麼模式或例子可以做到這一點?

回答

9

使用ViewModel。

你有一個包含兩個控件的視圖。有一個視圖模型,該視圖模型將包含要綁定到ListBox控件的ViewModel的列表。同樣在此視圖模型中,將列表框選擇綁定到TabControl然後綁定到的第二個視圖模型列表。

這樣,你的列表框驅動標籤控件顯示了沒有這些信息,進入應留忘卻的觀點存在的模型。

+0

包含兩個控件的視圖是一個棱鏡外殼和控制是在單獨的模塊,但我想我可以申請的原則。謝謝。 – GraemeF 2009-07-22 10:13:35

1

TabControl的是ItemsControl的,所以你不應該羞於它的ItemsSource綁定到ListBox.SelectedITems。

顯然視圖模型的列表應該會產生視圖模型爲標籤的屬性:

public TabViewModel ItemTabModel { get { ... } } 

而且由於TabControl的是有點滑稽,你需要添加ItemContainerStyle來填充TabControlItem內容,因爲正常TableControl的ItemTemplate僅影響製表符的標題。