两个viewmodel使用一个保存数据的Model
本文关键字:保存 一个 数据 Model viewmodel 两个 | 更新日期: 2023-09-27 18:18:09
我已经搜索了将近3个小时,发现了很多关于PRISM和VM数据共享的内容,但我的大脑无法理解它。
我有两个ViewModels MainViewModel和ListViewModel。MainViewModel有一个dockpanel,我想有一个公共菜单来添加,删除项目和关闭应用程序。在XAML中还有一个显示ListView的用户控件。ListView包含一些ObservableCollection<ProjectModel>
.
从MainVM我想添加更多的项目-所以到一个集合。为了访问包含数据的ListModel,我将它传递给两个ViewModels的构造函数:
public MainModuleViewModel(ListModel listModel)
{
ListModel = listModel;
InitializeCommands();
}
public ListModuleViewModel(ListModel listModel)
{
ListModel = listModel;
InitializeCommands();
}
但是似乎在初始化ListModel的过程中创建了不同的对象。
所以我的问题是:我要做什么,只在ListModel的一个对象上工作,我传递给构造函数?
一如既往,您有两个选择:
- 注册
ListModel
为单例(ContainerControlledLifetimeManager
在Unity中) - 或将服务注册为单例,将数据提供给视图模型
我会去第二个,因为它更灵活-你可以在其他地方使用不同的ListModel
实例与不同的内容,你可以让服务给每个视图模型自己的实例(虽然具有相同的内容),或者你可以让它给每个视图模型相同的实例等等…
public interface IDatasource
{
ListModel Data { get; }
}
internal class StephensService : IDatasource
{
ListModel Data { get; } = new ListModel(); // or however you plan to procure the data
}
// ... bootstrapper / module initialization ...
Container.RegisterType<IDatasource, StephensService>( new ContainerControllerLifetimeManager() );
// ...
internal class ListModuleViewModel
{
public ListModuleViewModel( IDatasource datasource )
{
var heresMyData = datasource.Data;
}
}
根据您的需要,服务可以实现INotifyPropertyChanged
或ListModel
可以是ObservableCollection
…