关闭模态对话框后应用程序退出

斯泰施瓦

我正在做一个简单的项目来学习 Caliburn.Micro

我有两个 ViewModels SettingsViewModelMainViewModel我想显示MainViewModel并在将SettingsViewModel显示为模态对话框后立即显示,以便用户可以在应用程序启动之前对其进行配置。

当我启动我的应用程序时,MainViewModel的视图不会显示,但会弹出模式。当我用 关闭对话框时TryClose(true) in Start(),我的应用程序将退出。我只想关闭SettingsViewModel,以便我可以继续Handle(Settings message) in MainViewModel

应用引导程序:

protected override void OnStartup(object sender, StartupEventArgs e)
{
     DisplayRootViewFor<MainViewModel>();
}

设置视图模型:

using Caliburn.Micro;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AbrechnungPSA.ViewModels
{
    class SettingsViewModel : Screen
    {
        private IEventAggregator _eventAggregator;

        public SettingsViewModel(IEventAggregator eventAggregator)
        {  
            _eventAggregator = eventAggregator;
        }

        /// <summary>
        /// Starts the Main Application
        /// </summary>
        public void Start()
        {
            TryClose(true); 

            _eventAggregator.PublishOnUIThread(new Settings());           
        }
    }
}

主视图模型:

using Caliburn.Micro;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace AbrechnungPSA.ViewModels
{
    public class MainViewModel : PropertyChangedBase, IHandle<Settings>
    {
        private Settings _settings;

        private readonly IEventAggregator _eventAggregator;
        private readonly IWindowManager _windowManager;

        public MainViewModel(IEventAggregator eventAggregator, IWindowManager windowManager)
        {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe(this);

            _windowManager = windowManager;

            dynamic settings = new ExpandoObject();
            settings.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            settings.ResizeMode = ResizeMode.NoResize;

            var result = _windowManager.ShowDialog(new SettingsViewModel(_eventAggregator), null, settings);
        }

        /// <summary>
        /// Receive User adjusted Settings and start Application
        /// </summary>
        /// <param name="message"></param>
        public void Handle(Settings message)
        {
            _settings = message;

            // Continue here ...
        }
    }
}
毫米8

ShowDialog在设置对话框关闭之前,方法不会返回。

OnStartup方法中显示设置对话框

引导程序:

protected override void OnStartup(object sender, StartupEventArgs e)
{
    base.OnStartup(sender, e);
    DisplayRootViewFor<MainViewModel>();

    dynamic settings = new ExpandoObject();
    settings.WindowStartupLocation = WindowStartupLocation.CenterOwner;
    settings.ResizeMode = ResizeMode.NoResize;

    var settingsVm = new SettingsViewModel(_container.GetInstance<IEventAggregator>());
    var result = _container.GetInstance<IWindowManager>()
        .ShowDialog(settingsVm, null, settings);

    settingsVm.Start();
}

主视图模型:

class MainViewModel : PropertyChangedBase, IHandle<Settings>
{
    private Settings _settings;

    private readonly IEventAggregator _eventAggregator;
    private readonly IWindowManager _windowManager;

    public MainViewModel(IEventAggregator eventAggregator, IWindowManager windowManager)
    {
        _eventAggregator = eventAggregator;
        _eventAggregator.Subscribe(this);
        _windowManager = windowManager;
    }

    public void Handle(Settings message)
    {
        _settings = message;
        // Continue here ...
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当对话框的ShowInTaskBar = false时,如何通过任务栏关闭应用程序或模式对话框?

来自分类Dev

关闭来自我的应用程序外部的对话框

来自分类Dev

Phonegap 3.2.0“很遗憾,AppName已停止。” 关闭应用程序时的对话框

来自分类Dev

Python:QMainWindow对话框关闭后如何关闭(或退出)Python处理

来自分类Dev

Facebook显示登录对话框而不是应用程序请求对话框

来自分类Dev

模态对话框的消息泵如何与主应用程序消息泵交互?

来自分类Dev

如何防止在按ESC键后关闭基于MFC对话框的应用程序,而是允许其他控件对其进行处理?

来自分类Dev

关闭共享对话框后导航回应用程序

来自分类Dev

Flutter&AlertDialog:加载后我的应用程序不显示警报对话框

来自分类Dev

当对话框的ShowInTaskBar = false时,如何通过任务栏关闭应用程序或模式对话框?

来自分类Dev

在首次启动应用程序时显示对话框

来自分类Dev

Windows 8应用程序的“打开文件”对话框

来自分类Dev

Applescript“退出当前应用程序”对话框

来自分类Dev

Win32 API:打开对话框窗口后,应用程序冻结

来自分类Dev

模态对话框中活动的全局应用程序菜单(在Linux上)

来自分类Dev

android菜单按钮显示对话框,以确认从应用程序退出

来自分类Dev

在对话框按钮上退出应用程序,然后单击

来自分类Dev

应用程序显示自定义对话框后不响应触摸事件

来自分类Dev

从片段退出应用程序对话框

来自分类Dev

应用程序加载后立即显示来自Facebook SDK的“共享对话框”

来自分类Dev

关闭共享对话框后导航回应用程序

来自分类Dev

在关闭对话框后再次打开对话框时,应用程序崩溃并给出“ java.lang.IllegalStateException”

来自分类Dev

我在对话框片段中单击按钮后,应用程序立即崩溃

来自分类Dev

移动应用程序如何防止当我在此对话框外单击时未关闭确认框

来自分类Dev

关闭主对话框后关闭对话框

来自分类Dev

在应用程序运行或关闭的特定时间显示对话框

来自分类Dev

关闭起始子对话框并进入父对话框后,我的 qt 桌面应用程序不断崩溃

来自分类Dev

使用 selenium java 在 IE 浏览器上运行的应用程序中的模态对话框未识别

来自分类Dev

基于 MFC 对话框的应用程序无法两次调用对话框

Related 相关文章

  1. 1

    当对话框的ShowInTaskBar = false时,如何通过任务栏关闭应用程序或模式对话框?

  2. 2

    关闭来自我的应用程序外部的对话框

  3. 3

    Phonegap 3.2.0“很遗憾,AppName已停止。” 关闭应用程序时的对话框

  4. 4

    Python:QMainWindow对话框关闭后如何关闭(或退出)Python处理

  5. 5

    Facebook显示登录对话框而不是应用程序请求对话框

  6. 6

    模态对话框的消息泵如何与主应用程序消息泵交互?

  7. 7

    如何防止在按ESC键后关闭基于MFC对话框的应用程序,而是允许其他控件对其进行处理?

  8. 8

    关闭共享对话框后导航回应用程序

  9. 9

    Flutter&AlertDialog:加载后我的应用程序不显示警报对话框

  10. 10

    当对话框的ShowInTaskBar = false时,如何通过任务栏关闭应用程序或模式对话框?

  11. 11

    在首次启动应用程序时显示对话框

  12. 12

    Windows 8应用程序的“打开文件”对话框

  13. 13

    Applescript“退出当前应用程序”对话框

  14. 14

    Win32 API:打开对话框窗口后,应用程序冻结

  15. 15

    模态对话框中活动的全局应用程序菜单(在Linux上)

  16. 16

    android菜单按钮显示对话框,以确认从应用程序退出

  17. 17

    在对话框按钮上退出应用程序,然后单击

  18. 18

    应用程序显示自定义对话框后不响应触摸事件

  19. 19

    从片段退出应用程序对话框

  20. 20

    应用程序加载后立即显示来自Facebook SDK的“共享对话框”

  21. 21

    关闭共享对话框后导航回应用程序

  22. 22

    在关闭对话框后再次打开对话框时,应用程序崩溃并给出“ java.lang.IllegalStateException”

  23. 23

    我在对话框片段中单击按钮后,应用程序立即崩溃

  24. 24

    移动应用程序如何防止当我在此对话框外单击时未关闭确认框

  25. 25

    关闭主对话框后关闭对话框

  26. 26

    在应用程序运行或关闭的特定时间显示对话框

  27. 27

    关闭起始子对话框并进入父对话框后,我的 qt 桌面应用程序不断崩溃

  28. 28

    使用 selenium java 在 IE 浏览器上运行的应用程序中的模态对话框未识别

  29. 29

    基于 MFC 对话框的应用程序无法两次调用对话框

热门标签

归档