创建了新的WPF 4.5 MVVM Light应用程序后,我想更改启动URI,以便在应用程序启动之前进行一些检查。我对App.xaml进行了以下更改:
<Application x:Class="MvvmLight1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MvvmLight1.ViewModel"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
StartupUri="MainWindow.xaml"
mc:Ignorable="d">
要:
<Application x:Class="MvvmLight1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MvvmLight1.ViewModel"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
并向OnStartup
添加了App.xaml.cs
方法:
public partial class App : Application
{
static App()
{
DispatcherHelper.Initialize();
}
protected override void OnStartup(StartupEventArgs e)
{
//base.OnStartup(e);
MainWindow win = new MainWindow();
win.Show();
}
}
这样做似乎改变了窗口运行的上下文。我确实尝试将数据上下文设置为MainViewModel,但这似乎没有帮助。
答案 0 :(得分:0)
您似乎没有将Startup
处理程序添加到Application
定义中...尝试此操作:
<Application x:Class="MvvmLight1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MvvmLight1.ViewModel"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Startup="OnStartup"> <!-- <<< Here -->
更新&gt;&gt;&gt;
你不能使用任何方法......你似乎没有为你的启动处理程序使用正确的方法定义...我的看起来像这样:
public void App_Startup(object sender, StartupEventArgs e)
{
}
尝试将object sender
参数添加到处理程序中。
答案 1 :(得分:0)
你应该在App.xaml.cs中有一些东西,比如:
base.OnStartup(e);
var window = new MainWindowView();
var viewModel = new MainWindowViewModel();
window.DataContext = viewModel;
window.Show();
或在MainView.xaml中:
<Window.DataContext>
<vms:MainWindowViewModel />
</Window.DataContext>
更新&gt;&gt;&gt;
Okej我下载了MVVM Light Project 4.5 WPF添加到我的VS2012以及我做了什么: 1.删除了App.xaml中的StartUp 2.在MainWindow.xaml中删除了数据上下文解析 3.创建如下代码:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var window = new MainWindow {DataContext = new MainViewModel(new DataService())};
window.Show();
}
一切正常。