0

创建了一个新的 WPF 4.5 MVVM 轻应用程序后,我想更改启动 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,但这似乎没有帮助。

4

2 回答 2

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>

更新>>>

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();
  }

一切正常。

于 2013-10-10T09:33:05.570 回答
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   -->

更新>>>

您不能为此使用任何方法...您似乎没有为启动处理程序使用正确的方法定义...我的看起来像这样:

public void App_Startup(object sender, StartupEventArgs e)
{

}

尝试将object sender参数添加到您的处理程序。

于 2013-10-10T09:23:56.337 回答