我想自己实现ViewModelLocator。所以我实现了世界上最简单的应用程序。我做了一切,就像在这教程中一样。但我还是有个例外:
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";
}
}
}在这个答案中,我发现:
确保在使用之前(按Xaml解析顺序)定义了资源。最简单的方法是把它放到App.xaml中
所以我把它放在App.xaml里。有人能解释一下这是怎么回事吗?我为什么要犯这个错误?
发布于 2016-01-26 06:13:44
您正在遇到这个bug 如果我的应用程序没有设置一个App.xaml文件,WPF - StartupUri文件不会被解析?。
从这一页:
存在VS代码生成错误,当只包含一个条目并且没有StartupUri属性时,有时不插入连接到程序其余部分所需的代码。
在这一页中,有3种解决方案(在此总结以确保完整性):
x:Name="App"<viewModelLocatorDemo:ViewModelLocator x:Key="ViewModelLocator"/>和<viewModelLocatorDemo:ViewModelLocator x:Key="ViewModelLocator2"/>Startup="Application_Startup"这一点显然不明显,而且很难排除故障,甚至在我自己的搜索中找到答案。希望这个答案能帮助其他人找到另一个答案。
https://stackoverflow.com/questions/35006559
复制相似问题