【问题标题】:Overriding WPF OnStartUp results in multiple window instances覆盖 WPF OnStartUp 会导致多个窗口实例
【发布时间】:2012-05-23 12:29:57
【问题描述】:

在一个简单的 MVVM 方法中,我通过覆盖 App.xaml 中的 OnStartup 将 MainWindow 链接到 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 应用程序时,这会导致 MainWindow 的两个实例。当我覆盖启动时,它不应该只导致一个吗?

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

【问题讨论】:

  • Alex Curtis 已经给出了正确的答案。解释一下:您只需在启动事件中创建另一个窗口,ApplicationStartupUri 只是告诉 wpf“请在完成加载后为我创建此窗口”。您还可以将 DataContext 赋值放在窗口本身的 Initialize Components 之后。

标签: wpf mvvm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多