2009-07-21 115 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仅影响制表符的标题。

相关问题