Hintergrund: Ich erstelle eine WPF-Anwendung MVVM verwenden und einen DI-Container mit meinem ViewmodelsApp.xaml-Datei wird nicht analysiert, wenn meine App kein StartupUri setzt?
Mein App.xaml sieht wie folgt aufzubauen:
<Application x:Class="WpfApp.App"
...xmlns etc...
StartupUri="MainWindow.xaml">
<Application.Resources>
<app:ServiceLocator x:Key="serviceLocator" />
</Application.Resources>
</Application>
MainWindow.xaml sieht wie folgt aus:
Jetzt funktioniert das alles gut, aber die StartupUri
ist fest in die XAML, die ich nicht will.
Nach Führung von mehreren Blogeinträge und Artikel fand ich, Ich entfernte die StartupUri
, und versuchte, die MainWindow
von OnStartup
in App.xaml.cs dieses Einhaken wie zu erstellen:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
new MainWindow().Show();
}
Das Problem ist, die App stürzt ab Beim Versuch, das Fenster mit folgender Ausnahme anzuzeigen:
Die Ressource mit dem Namen '{serviceLocator}' kann nicht gefunden werden. Bei Ressourcennamen wird zwischen Groß- und Kleinschreibung unterschieden Fehler beim Objekt ‚System.Windows.Data.Binding‘ in Markup-Datei ‚WpfApp; Komponente/MainWindow.xaml‘ Linie 8 Position 45.
Soweit ich das beurteilen kann, der <Application.Resources>
Abschnitt einfach nicht gelesen werden aus der XAML-Datei. Ich kann einige Code in der OnStartup setzen die Ressource programmatisch wie folgt hinzuzufügen:
Resources.BeginInit();
Resources.Add("serviceLocator", new ServiceLocator());
Resources.EndInit();
aber das ist eine hässliche Hack, und hilft mir nicht, wenn ich etwas anderes in der app.xaml Datei setzen wollte später ? :-(
Sollte ich ein anderes Ereignis sein Einhaken gibt es eine Möglichkeit, um dieses
Das löst es, danke! –
OMG, danke! Ich dachte, ich würde verrückt werden – Heliac
Warum ist es wichtig, ein Ereignis von XAML einzurichten? Es schlägt fehl, wenn von Konstruktor ... –