【发布时间】:2015-07-08 06:54:27
【问题描述】:
我一直在关注mvvmlight 来编写一个项目。我有 3 个xaml 文件MainWindow、View1、View2、
我在ViewModelLocator 中注册了所有三个视图模型,以及View1Model 使用的数据服务
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<IView1Service, View1Service>();
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<View1Model>();
SimpleIoc.Default.Register<View2Model>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
}
}
public View1Model View1
{
get
{
return ServiceLocator.Current.GetInstance<View1Model >(Guid.NewGuid().ToString());
}
}
public View1Model View2
{
get
{
return ServiceLocator.Current.GetInstance<View2Model >(Guid.NewGuid().ToString());
}
}
View1Model 需要 IView1Service 作为构造函数输入,
public View1Model(IView1Service view1Service)
{
_view1_service = view1Service;
}
在我的App.xaml 中,我已将它们注册如下
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
<DataTemplate DataType="{x:Type vm:View1Model}">
<views:view1 />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:View2Model}">
<views:View2 />
</DataTemplate>
</Application.Resources>
当然View1 View2 是xmal 文件在MyProject.View 命名空间下。
我试图初始化MainViewModel 中的所有视图,因此我访问了MainViewModel 中的所有视图模型实例
public MainViewModel()
{
// Add available pages
PageViewModels.Add(new View1Model(new View1Service())); // <========How to get this from the ViewModelLocator ?
PageViewModels.Add(new View1Model());
// Set starting page
CurrentPageViewModel = PageViewModels[0];
}
PageViewModels.Add(new View1Model()); 在这行代码中,我希望从ViewModelLocator 获取它,而不是传递View1Service 对象。但是我在App.xaml 注册的Locator 在这里无法访问,解决此问题的最佳方法是什么?
【问题讨论】:
标签: c# wpf xaml mvvm mvvm-light