MVVM Light - 更改启动URI

时间:2013-10-10 08:29:46

标签: c# .net wpf mvvm mvvm-light

创建了新的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,但这似乎没有帮助。

2 个答案:

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

一切正常。