我已经搜索了近3个小时,发现了很多关于PRISM和虚拟机数据共享的内容,但是我无法理解它。
我有两个ViewModel MainViewModel和ListViewModel。 MainViewModel有一个dockpanel,我想在其中添加一个常用菜单,删除项目并关闭应用程序。 XAML中还有一个显示ListView的用户控件。 ListView包含一些ObservableCollection<ProjectModel>
。
从MainVM我想添加更多项目 - 所以要添加到集合中。要访问包含数据的ListModel,我将它传递给两个ViewModel的构造函数:
public MainModuleViewModel(ListModel listModel)
{
ListModel = listModel;
InitializeCommands();
}
public ListModuleViewModel(ListModel listModel)
{
ListModel = listModel;
InitializeCommands();
}
但似乎在初始化期间创建了ListModel的不同对象。
所以我的问题是:我需要做什么,只需要处理ListModel的一个对象,我将其传递给构造函数?
答案 0 :(得分:1)
您一如既往地有两个选择:
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
...