在ViewModels之间共享状态

时间:2009-07-21 13:00:26

标签: wpf silverlight xaml mvvm

我有两个ViewModel,它们为不同的视图提供相同的模型。一个将模型显示为ListBox中的项目,另一个将其显示为TabControl中的标签。 TabControl将显示ListBox中所选项目的标签,以便标签随着选择的变化而变化。

我可以通过向模型添加IsSelected属性并将ViewModels绑定到它(有点像this)来轻松地同步这两个控件,但是这会使模型混乱,并且显示详细信息真的属于那里。

似乎我需要在Model和ViewModel之间保留这个额外状态。是否有任何模式或示例可以做到这一点?

2 个答案:

答案 0 :(得分:9)

使用ViewModel。

你有一个包含两个控件的视图。有一个视图模型,它将包含要绑定到的ListBox控件的ViewModel列表。同样在此视图模型中,将列表框选择绑定到TabControl随后也绑定到的第二个视图模型列表。

通过这种方式,您的列表框可以驱动标签控件显示的内容,而不会将此信息输入到模型中,该模型应该忽略视图的存在。

答案 1 :(得分:1)

TabControl是ItemsControl,所以你不应该害怕将其ItemsSource绑定到ListBox.SelectedITems。

显然,List的ViewModel应该有一个属性,可以为Tabs生成ViewModel:

public TabViewModel ItemTabModel { get { ... } }

因为TabControl有点搞笑,你需要添加ItemContainerStyle来填充TabControlItem的内容,因为TableControl的普通ItemTemplate只影响标签的标题。