我已经搜索过,但没有任何东西可以帮助我到达我需要到达的地方。
我的问题描述:
我们有一个对话窗口,其中包含多个 View (用户控件)。单击“下一步”和“返回”将使您在此对话框中前进和后退,类似于向导。
在 6 个对话框中,有 4 个引用相同的核心数据。例如我们会说一个 ObservableCollection
既然如此,我有 4 个 viewModel,它们都需要引用同一个 ObservableCollection。我不想在每次进入“向导”对话框中的新步骤时保存并重新加载列表。
我的问题是什么是最好/最实用的方法来完成这个。
我考虑过以下事项:
- 静态类
- 单例 - 嗯嗯
- 在 View 之间传递参数(尽管这很困难,因为 nextlocation 和 previouslocation 非常通用)。
- 中介者模式?我对调解器模式的问题是我不想在 View 之间“交流”。我只希望所有 View 共享相同的数据源。
- 观察者模式?如果我正在使用 ObservableCollections 并实现 INotifyPropertyChanged,那么我不需要通知任何人更改吗?
请告诉我您可能需要帮助我的其他信息,我很乐意提供。
我在设计时并不是真的在寻找代码示例。尽管如果代码示例可以帮助解释设计,我完全赞成。
最后,EventAggregator 不是一个选项,因为我没有使用任何框架(除非我没有正确理解 EventAggregator)。
提前致谢!
请您参考如下方法:
就像 Randolf 所说的 DI 会起作用。我通过共享 CreationPolicy 的 MEF 和构造函数注入(inject)来执行此操作。你只需要把你想为你处理的东西 4views 放在一个导出类中。这有多容易:)
顺便说一句:调解器模式是在 View 模型而非 View 之间“通信”。
[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)
{}
}
现在 4 个 View 模型引用了您的核心数据
