【发布时间】:2017-08-24 13:42:40
【问题描述】:
我正在做一个简单的项目来学习 Caliburn.Micro
我有两个 ViewModel SettingsViewModel 和 MainViewModel。我想显示 MainViewModel 并在将 SettingsViewModel 显示为模态对话框之后立即显示,以便用户可以在应用程序启动之前对其进行配置。
当我启动我的应用程序时,MainViewModel 的视图不会显示,但会弹出模式。当我用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 ...
}
}
}
【问题讨论】:
标签: c# .net wpf dependency-injection caliburn.micro