[英]Application exits after closing modal Dialog
我正在研究一个简单的项目来学习Caliburn.Micro
我有两个ViewModels SettingsViewModel和MainViewModel 。 我想显示MainViewModel,然后立即将SettingsViewModel显示为模式对话框,以便用户可以在启动之前配置应用程序。
当我启动我的应用程序时, MainViewModel的视图未显示,但弹出了模态。 当我TryClose(true) in Start()
使用TryClose(true) in Start()
关闭对话框时,我的应用程序将退出。 我只想关闭SettingsViewModel ,这样我才能继续Handle(Settings message) in MainViewModel
AppBootstrapper:
protected override void OnStartup(object sender, StartupEventArgs e)
{
DisplayRootViewFor<MainViewModel>();
}
SettingsViewModel:
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());
}
}
}
MainViewModel:
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 ...
}
}
}
在关闭设置对话框之前, 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();
}
MainViewModel:
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 ...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.