当前位置:  开发笔记 > 编程语言 > 正文

当我运行WPF MVVM应用程序时,会显示两个主窗口实例

如何解决《当我运行WPFMVVM应用程序时,会显示两个主窗口实例》经验,为你挑选了1个好方法。

我在MS VS 2015 Professional(.NET Framework 4.6)中开发WPF MVVM应用程序.当我运行我的WPF MVVM应用程序时,我的应用程序主窗口的两个实例正在显示.它为什么有位置?下面是我的应用程序主窗口的标记 - MainWindow.xaml:


    

    

下面是MainWindow.xaml.cs的代码:

using System.Windows;

namespace SuperMrgaChartDrawer
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

以下是App.xaml.cs的代码:

using System;
using System.Windows;
using SuperMrgaChartDrawer.ViewModel;

namespace SuperMrgaChartDrawer
{
    public partial class App : Application
    {
        /// 
        /// My application OnStartup handler.
        /// 
        /// 
        protected override void OnStartup(StartupEventArgs e)
        {
            // Call OnStartup in base class.
            base.OnStartup(e);
            // Create an instance of application main window.
            MainWindow window = new MainWindow();
            // Create an instance of View Model of main window.
            var viewModel = new MainWindowViewModel();
            // Define handler for "Main Window Request Close" event
            // and subscribe on it.
            EventHandler handler = null;
            handler = delegate
            {
                viewModel.RequestClose -= handler;
                window.Close();
            };
            viewModel.RequestClose += handler;
            // Set MainWindowViewModel as main window data context.
            window.DataContext = viewModel;
            // Display main window.
            window.Show();
        }
    }
}

这个错误的原因是什么?我该怎么做才能消除这个错误.请帮忙.我们将非常感谢您的帮助.



1> Dennis..:

你的App.xaml包含StartupUri="MainWindow.xaml".此属性由WPF应用程序模板添加.StartupUri如果要手动显示窗口,请删除.

此外,这是添加事件处理程序的相当奇特的方式:

EventHandler handler = null;
handler = delegate
{
    viewModel.RequestClose -= handler;
    window.Close();
};
viewModel.RequestClose += handler;

因为RequestClose就是EventHandler,你可以从上面的代码替换(这是主窗口,因此,没有必要退订):

viewModel.RequestClose += (sender, args) => window.Close();

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有