【问题标题】:Sharing state between ViewModels在 ViewModel 之间共享状态
【发布时间】:2010-11-12 15:24:46
【问题描述】:

我有两个 ViewModel,它们将相同的模型呈现给不同的视图。一个将模型显示为ListBox 中的一个项目,另一个将其显示为TabControl 中的一个选项卡。 TabControl 是为ListBox 中选择的项目显示选项卡,以便选项卡随着选择的变化来来去去。

我可以通过向模型添加 IsSelected 属性并将 ViewModels 绑定到它来轻松同步两个控件(有点像 this),但这会使模型变得混乱,其中包含不真正属于的演示细节在那里。

似乎我需要在模型和视图模型之间设置一些东西来保持这个额外的状态。是否有任何模式或示例说明这样做的好方法?

【问题讨论】:

    标签: wpf silverlight xaml mvvm


    【解决方案1】:

    使用 ViewModel。

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

    这样,您的列表框将驱动选项卡控件显示的内容,而无需将此信息输入模型,这应该忽略视图的存在。

    【讨论】:

    • 包含两个控件的 View 是一个 Prism shell,控件位于不同的模块中,但我想我可以应用这个原理。谢谢。
    【解决方案2】:

    TabControl 是 ItemsControl,因此您不必害羞将其 ItemsSource 绑定到 ListBox.SelectedITems。

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

    public TabViewModel ItemTabModel { get { ... } }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2019-07-02
      • 2020-08-04
      • 2019-01-31
      • 2011-05-24
      • 1970-01-01
      • 2016-01-25
      相关资源
      最近更新 更多