2012-05-23 31 views
6

在簡單的MVVM方法中,我通過覆蓋App.xaml中的OnStartup將MainWindow鏈接到ViewModel。在多個窗口實例中覆蓋WPF OnStartUp結果

public partial class App : Application 
    { 

    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     MainWindow window = new MainWindow(); 
     var viewModel = new MainWindowViewModel(); 
     window.DataContext = viewModel; 
     window.Show(); 
    } 

    } 

當我運行WPF應用程序時,會導致MainWindow的兩個實例。難道它不僅僅是因爲我壓倒了初創公司?

其中一個窗口顯示正確的DataContext(ViewModel),而另一個窗口顯示不正確。

+1

Alex Curtis已經給出了正確的答案。解釋它:你只需在啓動事件中創建另一個窗口,ApplicationStartupUri只是告訴wpf「請在完成加載後爲我創建這個窗口」。在初始化組件之後,您也可以將DataContext賦值放置在窗口本身中。 – dowhilefor

回答

10

在App.xaml中:

<Application x:Class="WpfApplication1.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 

除去的StartupUri。這將停止第二次窗口加載。