在启动时重写WPF会导致多个窗口实例

在启动时重写WPF会导致多个窗口实例,wpf,mvvm,Wpf,Mvvm,在一种简单的MVVM方法中,我通过覆盖App.xaml中的OnStartup将主窗口链接到ViewModel public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow window = new MainWindow(); var viewM

在一种简单的MVVM方法中,我通过覆盖App.xaml中的OnStartup将主窗口链接到ViewModel

  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应用程序时出现两个主窗口实例。当我覆盖启动时,它不应该只产生一个吗

其中一个窗口显示正确的DataContext(ViewModel),而另一个窗口不显示。

在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。这将停止第二个窗口加载。

亚历克斯·柯蒂斯已经给出了正确的答案。为了解释这一点:您只需在启动事件中创建另一个窗口,ApplicationStartupUri只会告诉wpf“请在完成加载后为我创建此窗口”。您还可以在初始化组件之后,将DataContext分配放在窗口本身中。