【问题标题】:MVVM - Menu View with Preview View (Shared ViewModel) approachMVVM - 带有预览视图的菜单视图(共享视图模型)方法
【发布时间】:2016-10-20 13:49:33
【问题描述】:

我刚刚开始我的 MVVM 和 WPF 之旅,我需要一个建议来解决我的问题,或者指导我找到正确的解决方案。

图片链接:https://s12.postimg.org/md0h6fv3x/Simple_App.png

描述(我想要达到的目标):

  • View A 是一个带有 ListBox 和 DataContext 的菜单(UserControl):V.ObservableCollection

  • 视图 B 是视图 A 列表框中所选项目的预览

  • 视图 A 和 B 从 MainWindow 加载

实现这一目标的最简单和最干净的方法是什么?

  1. 我正在考虑与 View A&B 共享同一个 ViewModel。 在 ViewModel 中创建一个 SelectedItem 属性,然后将其放入 MainWindow 的资源中,并将 datacontext 绑定到 View A & B

    • 这是有效的方法吗?如果该虚拟机发生更改,是否会在两个视图中正确更新?
  2. 以某种方式将 View 的 A 列表框 SelectedItem 绑定到 View B 预览模式,但不知道如何。

【问题讨论】:

  • MainWindowViewModel 引用绑定在顶层窗口级别的所有 VM。

标签: wpf mvvm listbox viewmodel datacontext


【解决方案1】:
  1. 只使用一个ViewModel。 例如;伪代码:

    public class ViewModel : INotifyPropertyChanged
    {
      public ObservableCollection<Employee>{get;}          
    
      /* provide change notification in ChosenItem */
      public Employee ChosenItem{get;set;}
    }
    
  2. 对两个视图都使用这个ViewModel as DataContext

【讨论】:

  • 感谢您的回答,但我希望它在第二部分获得更深入的指导:将此 ViewModel 用作两个视图的 DataContext。
  • @Chomik 您需要在左侧视图中显示列表,在右侧视图中显示其预览,并且两者都存在于 ViewModel 类中。
  • 我已经有了该列表,但我需要干净的解决方案如何与两个以上的视图共享通用 ViewModel。如何为这些视图设置与 DataContext 相同的 ViewModel?
  • @Chomik 这不是两个视图,你误认为它们是两个。
  • 无论如何我认为我可以正常工作,我将 MainWindow 分为两列并将该网格的 DataContext 设置为共享 ViewModel 并且它可以工作:) 我希望这是一个好方法!感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多