[英]Two ViewModels are using one Model which holds data
我搜索了将近3个小时,发现了大量有关PRISM和VM数据共享的信息,但是我无法理解。
我有两个ViewModels MainViewModel和ListViewModel。 MainViewModel有一个底座面板,例如,我要在其中有一个通用菜单来添加,删除项目和关闭应用程序。 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
注册为单例(Unity中的ContainerControlledLifetimeManager
) 我会选择第二个,因为它更灵活-您可以在其他地方使用具有不同内容的其他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
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.