Das Übergeben eines ViewModel an die Shell ist in der Tat einfacher als das Übergeben an die anderen Seiten, da die Shell die einzige Seite ist, die von uns explizit erstellt wird: Es sollte also ausreichen, einen Parameter zum Konstruktor der Shell hinzuzufügen Shell vom Typ 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;
}
dann setzen die Datacontext in einer stark typisierten Weise, wie bei allen anderen Seiten (nützlich, vor allem, wenn Sie verwenden x: Bind-Bindungen in xAML):
public ShellViewModel ViewModel => DataContext as ShellViewModel;
Und jetzt Sie müssen nur eine Instanz Ihres ViewMo übergeben del Klasse, ziehen Sie es aus Ihrem IoC-Container, wenn Sie die Shell erstellen. In der Schablone Schablone 10 neuesten für VS2017, sollte es in der CreateRootElement
Methode der App Klasse:
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()),
};
}
natürlich new ShellViewModel()
mit dem Code ersetzt sie von Autofac zu ziehen.
Könnten Sie bitte einige Codes teilen? – Scavenger