我想通过自己实现ViewModelLocator。所以我实现了世界上最简单的应用程序。我在this教程中做了所有事情。但我仍然有例外:
发生了XamlParseException
抛出异常:'System.Windows.Markup.XamlParseException'中 PresentationFramework.dll
其他信息:'提供价值 'System.Windows.StaticResourceExtension'引发了异常。线 数字'8'和行位置'9'。
这就是这一行:
DataContext="{Binding MainWindowViewModel, Source={StaticResource ViewModelLocator}}">
以下是代码:
的App.xaml
<Application x:Class="ViewModelLocatorDemo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModelLocatorDemo="clr-namespace:ViewModelLocatorDemo">
<Application.Resources>
<viewModelLocatorDemo:ViewModelLocator x:Key="ViewModelLocator"/>
</Application.Resources>
</Application>
App.xaml.cs
namespace ViewModelLocatorDemo
{
using System.Windows;
using ViewModelLocatorDemo.Views;
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow mainWindow = new MainWindow();
mainWindow.Show();
}
}
}
ViewModelLocator.cs
namespace ViewModelLocatorDemo
{
using ViewModels;
public class ViewModelLocator
{
public MainWindowViewModel MainWindowViewModel
{
get { return new MainWindowViewModel(); }
}
}
}
MainWindow.xaml
<Window x:Class="ViewModelLocatorDemo.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300"
DataContext="{Binding MainWindowViewModel, Source={StaticResource ViewModelLocator}}">
<Grid>
<Frame x:Name="MainFrame" Margin="50" BorderThickness="2" BorderBrush="Black" />
</Grid>
</Window>
MainWindowViewModel.cs
namespace ViewModelLocatorDemo.ViewModels
{
public class MainWindowViewModel
{
public string MainText { get; set; }
public MainWindowViewModel()
{
MainText = "The first page";
}
}
}
在this answer我找到了:
确保在使用之前定义资源(在Xaml中 解析顺序)。最简单的方法是将其放入App.xaml
所以我在App.xaml中有它。如果有人能解释一下这里发生了什么?为什么我收到此错误?
答案 0 :(得分:5)
您遇到此错误WPF - App.xaml file does not get parsed if my app does not set a StartupUri?
从该页面开始:
存在一个VS代码生成错误,当只包含一个条目且没有StartupUri属性时,有时不会插入连接到程序其余部分所需的代码。
从该页面,有3个解决方案(这里总结完整性):
x:Name="App"
<viewModelLocatorDemo:ViewModelLocator x:Key="ViewModelLocator"/>
和<viewModelLocatorDemo:ViewModelLocator x:Key="ViewModelLocator2"/>
Startup="Application_Startup"
这绝对不是很明显,很难排除故障甚至在我自己的搜索中找到答案。希望此答案可以帮助其他人找到其他答案。