Чтобы воспроизвести ошибку:
Создайте новое приложение MVVM-Light WPF.
Скопируйте MainWindow.xaml в MainWindow2.xaml Переименуйте имя класса MainWindow2 в MainWindow2 (и конструктор)
Переименуйте атрибут класса окна MainWindow2 в "x: Class =" MvvmLight2.MainWindow2 "
Удалите StartupUri из App.xaml
Добавьте в приложение следующее:
protected override void OnStartup(StartupEventArgs e)
{
new MainWindow().Show();
new MainWindow2().Show();
}
Запустите приложение и получите ошибку:
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.
Чтобы устранить ошибку: удалите DataContext = "{Binding Main, Source = {StaticResource Locator}}" из обоих окон.
Добавьте следующую строку в конструкторы обоих окон:
DataContext = new ViewModelLocator().Main;
Приложение теперь запускается.
Вопрос в том, почему он не распознает локатор, даже если он определен как ресурс приложения?
Обновление:
Я только что заметил, что могу добавить один и тот же ресурс и в xaml, и в код без каких-либо видимых побочных эффектов. Теперь возникает вопрос, есть ли проблема?с этим?Создает ли он дублирующийся ресурс или нет, потому что у них одинаковый ключ?Больше, чем просто взлом, я пытаюсь понять, что происходит.