我正在做一个简单的项目来学习 Caliburn.Micro
我有两个 ViewModels SettingsViewModel和MainViewModel。我想显示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 ...
}
}
}
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] 删除。
我来说两句