我正在寻找将ViewModel注入Shell视图的最佳方法。
我正在使用Autofac(但如果样本可用,我可以采用其他IoC容器中的代码)。我有其他虚拟机正确注入 - 但是使用App类的ResoleForPage方法解析VM的方法。
我对UWP的发展很新,非常感谢任何帮助!
答案 0 :(得分:1)
将ViewModel传递给Shell确实比将其传递给其他页面更简单,因为Shell是我们唯一创建的唯一页面:因此,应该足以将参数添加到Shell的构造函数中类型ShellViewModel:
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,与任何其他页面一样(主要用于x:绑定xam中的绑定):
public ShellViewModel ViewModel => DataContext as ShellViewModel;
现在,您只需要在创建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()),
};
}
当然用代码替换new ShellViewModel()
以从Autofac中提取它。