重现错误:
创建一个新的MVVM-Light WPF应用程序。
将MainWindow.xaml复制到MainWindow2.xaml将MainWindow2的类名重命名为MainWindow2(和构造函数)
将MainWindow2窗口类属性重命名为“x:Class =”MvvmLight2.MainWindow2“
从App.xaml中删除StartupUri
将以下内容添加到App:
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和代码上添加相同的资源而没有任何可见的副作用。现在的问题是,这有问题吗?它是否会创建重复的资源,或者它没有,因为它们具有相同的密钥? 不仅仅是黑客入侵,我还在努力了解正在发生的事情。
答案 0 :(得分:2)
通过在InitializeComponent()
事件处理程序中添加Application.Startup
来管理以解决此问题:
<Application x:Class="SomeNamespace.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup"> <!-- Important to use Startup -->
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
InitializeComponent(); // <-- Important to set this!
var window = new MainWindow();
window.Show();
}
}