我是Caliburn Micro的新手,想在OnExit期间访问ViewModel属性。
public class AppBootstrapper : Bootstrapper<MainViewModel>
{
protected override void OnExit(object sender, EventArgs e)
{
if (mainViewModel.MyParam == 42)
{
}
base.OnExit(sender, e);
}
从默认的WP7模板(没有Caliburn)我习惯拥有App.ViewModel,这是一个带有singleton get访问器的静态字段,其中viewmodel将在第一次访问时创建。 (见下一个代码片段)
public partial class App : Application
{
private static MainViewModel viewModel = null;
public static MainViewModel ViewModel
{
get
{
// Delay creation of the view model until necessary
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
set
{
viewModel = value;
}
}
现在我尝试将Caliburn Micro 1.1与WPF项目一起使用,并且不知道应该如何完成。 我需要在AppBootStrapper内的OnExit期间访问ViewModel。
我认为这应该是可能的,因为我的AppBootstrapper继承自Bootstrapper,但无法找到正确的方法。
任何提示,如何在WPF中完成这项工作都非常受欢迎?
由于 罗布
答案 0 :(得分:0)
尝试
MainViewModel mainViewModel = IoC.Get<MainViewModel>();
以下是代码的外观:
public class AppBootstrapper : Bootstrapper<MainViewModel>
{
protected override void OnExit(object sender, EventArgs e)
{
// Get the Main View Model
MainViewModel mainViewModel = IoC.Get<MainViewModel>();
if (mainViewModel.MyParam == 42)
{
//Do work
}
base.OnExit(sender, e);
}
}
这假设有两件事:
答案 1 :(得分:0)
在搜索了一下后,我想我找到了自己的问题的解决方案:从这里添加SimpleContainer.cs:link
并将其添加到我的AppBootstrapper代码中:
public class AppBootstrapper : Bootstrapper<MainViewModel>
{
private SimpleContainer container;
protected override void Configure()
{
container = new SimpleContainer();
container.RegisterSingleton(typeof(MainViewModel), null, typeof(MainViewModel));
container.RegisterSingleton(typeof(IWindowManager), null, typeof(WindowManager));
}
protected override object GetInstance(Type service, string key)
{
return container.GetInstance(service, key);
}
很高兴听到一些评论,无论这是否合适。