Um den Fehler zu reproduzieren:
Erstellen Sie eine neue MVVM-Light WPF-Anwendung.
Kopieren von MainWindow.xaml nach MainWindow2.xaml Umbenennen des Klassennamens von MainWindow2 in MainWindow2 (und des Konstruktors)
Umbenennen des Fensterklassenattributs MainWindow2 in "x:Class="MvvmLight2.MainWindow2"
StartupUri aus App.xaml entfernen
Fügen Sie folgendes zu App:
protected override void OnStartup(StartupEventArgs e)
{
new MainWindow().Show();
new MainWindow2().Show();
}
Führen Sie die Anwendung aus und erhalten Sie eine Fehlermeldung:
Cannot find resource named '{Locator}'. Resource names are case sensitive. Error at object 'System.Windows.Data.Binding' in markup file 'MvvmLight2;component/mainwindow.xaml' Line 10 Position 9.
So beheben Sie den Fehler: Entfernen Sie DataContext="{Binding Main, Source={StaticResource Locator}}" aus beiden Windows.
Fügen Sie die folgende Zeile in die beiden Windows-Konstruktoren ein:
DataContext = new ViewModelLocator().Main;
Die Anwendung läuft jetzt.
Die Frage ist, warum wird der Locator nicht erkannt, obwohl er als Anwendungsressource definiert ist?
Aktualisierung:
Ich habe gerade bemerkt, dass ich dieselbe Ressource sowohl im Xaml als auch im Code ohne sichtbare Nebeneffekte hinzufügen kann. Die Frage ist nun, gibt es ein Problem mit diesem? Erzeugt es eine doppelte Ressource oder nicht, weil sie den gleichen Schlüssel haben? Mehr als nur hacken es, ich versuche zu verstehen, was los ist.