在ViewModels之间共享集合

tro*_*ous 1 c# wpf mvvm mediator data-sharing

我搜索过,没有什么可以帮助我到达我需要的地方.

我的问题描述:

  1. 我们有一个对话窗口,可以托管多个视图(usercontrols).单击下一步和后退将在此对话框中向前和向后移动,类似于向导.

  2. 在6个对话框中,其中4个引用相同的核心数据.例如,我们将说一个ObservableCollection

  3. 既然如此,我有4个viewModel,它们都需要引用同一个ObservableCollection.每次我进入"向导"对话框中的新步骤时,我都不想保存然后重新加载列表.

我的问题是实现这一目标的最佳/最实用的方法是什么.

以下我考虑过的事情:

  1. 静态类
  2. 辛格尔顿 - 呃
  3. 在视图之间传递参数(尽管这很难,因为nextlocation和previouslocation非常通用).
  4. 调解员模式?调解器模式的问题在于我不想在视图之间"通信".我只是希望所有视图共享相同的数据源.
  5. 观察者模式?如果我正在使用ObservableCollections并实现INotifyPropertyChanged,那么我不需要通知任何人我应该做出改变吗?

请告诉我您可能需要的其他信息来帮助我,我很乐意提供.

我不是在寻找代码示例,因为我正在设计.虽然代码示例可以帮助解释设计,但我全都是为了它.

最后,EventAggregator不是一个选项,因为我没有使用任何框架(除非我没有正确理解EventAggregator).

提前致谢!!

bli*_*eis 5

像Randolf说DI会起作用.我用MEF和CreationPolicy共享的构造函数注入执行此操作.你只需要把你想要的东西放在一个出口类中.这有多容易:)

和顺便说一句:介体模式是在视图模型而不是视图之间"通信".

[Export]
public class MyClassWichHasDataSharedFor4Views {}

public class Viewmodel1
{
   [ImportingContructor] 
   public Viewmodel1(MyClassWichHasDataSharedFor4Views shareddata)
   {}
}

public class Viewmodel2
{
   [ImportingContructor] 
   public Viewmodel2(MyClassWichHasDataSharedFor4Views shareddata)
   {}
}

public class Viewmodel3
{
   [ImportingContructor] 
   public Viewmodel3(MyClassWichHasDataSharedFor4Views shareddata)
   {}
}

public class Viewmodel4
{
   [ImportingContructor] 
   public Viewmodel4(MyClassWichHasDataSharedFor4Views shareddata)
   {}
}
Run Code Online (Sandbox Code Playgroud)

现在,4个视图模型引用了您的核心数据