Template10 MVVM IoC将ViewModel注入Shell视图
我正在寻找将ViewModel注入Shell视图的最佳方法 我使用的是Autofac(但如果有示例,我可以采用其他IoC容器中的代码)。我已经正确地注入了其他虚拟机-但是使用App类的resoleformage方法解析虚拟机的方法Template10 MVVM IoC将ViewModel注入Shell视图,mvvm,uwp,inversion-of-control,template10,Mvvm,Uwp,Inversion Of Control,Template10,我正在寻找将ViewModel注入Shell视图的最佳方法 我使用的是Autofac(但如果有示例,我可以采用其他IoC容器中的代码)。我已经正确地注入了其他虚拟机-但是使用App类的resoleformage方法解析虚拟机的方法 我是UWP开发的新手,非常感谢您的帮助 将ViewModel传递给Shell确实比传递给其他页面更简单,因为Shell是唯一由我们显式创建的页面:因此,向ShellViewModel类型的Shell的构造函数添加一个参数就足够了: public Shell()
我是UWP开发的新手,非常感谢您的帮助 将ViewModel传递给Shell确实比传递给其他页面更简单,因为Shell是唯一由我们显式创建的页面:因此,向ShellViewModel类型的Shell的构造函数添加一个参数就足够了:
public Shell()
{
Instance = this;
this.InitializeComponent();
}
public Shell(INavigationService navService, ShellViewModel model) : this()
{
navigationMenu.NavigationService = navService;
navigationMenu.RefreshStyles(App.Current.RequestedTheme, true);
this.DataContext = model;
}
然后以强类型方式公开DataContext,与其他任何页面一样(主要在xaml中使用x:Bind绑定时有用):
现在,当您创建Shell时,您只需传递ViewModel类的一个实例,从IoC容器中提取它。在VS2017的最新模板10模板中,它应该位于App类的CreateRootElement
方法中:
public override UIElement CreateRootElement(IActivatedEventArgs e)
{
var service = NavigationServiceFactory(BackButton.Attach, ExistingContent.Include);
return new Template10.Controls.ModalDialog
{
DisableBackButtonWhenModal = true,
Content = new Shell(service, new ShellViewModel()),
};
}
当然要用代码替换新的ShellViewModel(),以便从Autofac中提取新的ShellViewModel。您能分享一些代码吗?
public override UIElement CreateRootElement(IActivatedEventArgs e)
{
var service = NavigationServiceFactory(BackButton.Attach, ExistingContent.Include);
return new Template10.Controls.ModalDialog
{
DisableBackButtonWhenModal = true,
Content = new Shell(service, new ShellViewModel()),
};
}