Caliburn microwpf窗口管理

本文关键字:管理 窗口 microwpf Caliburn | 更新日期: 2023-09-27 18:05:40

我想使用caliburn启动一个WPF应用程序。为了尽可能多地使用TDD,我使用了caliburn。micro之前在WP7上做过,但WPF似乎是一个不同的船,而且文档没有WP7那么完整。

我已经用Bootstrapper设置了项目

public class ApplicationBootstrapper : Bootstrapper
{
    private SimpleContainer _container;
    private WindowManager _windowManager;
    protected override void Configure()
    {
        _container = new SimpleContainer();
        _windowManager = new WindowManager();
        _container.RegisterSingleton(typeof(MainViewModel), "MainViewModel", typeof(MainViewModel));
        _container.RegisterSingleton(typeof(DataViewModel), "DataViewModel", typeof(DataViewModel));
    }
    protected override object GetInstance(Type service, string key)
    {
        return _container.GetInstance(service, key);
    }
    protected override IEnumerable<object> GetAllInstances(Type service)
    {
        return _container.GetAllInstances(service);
    }
    protected override void BuildUp(object instance)
    {
        _container.BuildUp(instance);
    }
    protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
    {
        _windowManager.ShowWindow(_container.GetInstance(typeof(MainViewModel), "MainViewModel"));
    }
}

这加载MainView很好,这让我认为我赢了,但我当时想继续前进,有另一个视图/视图模型设置,但对于我的生活,我不能得到窗口管理器传递到我的viewmodel,以加载更多的视图(就像我在WP7中的NavigationService)

这是我的MainViewModel代码

public class MainViewModel : BaseViewModel
{
    private readonly DataViewModel _dataViewModel;
    private readonly IWindowManager _windowManager;

    public MainViewModel(IWindowManager windowManager, DataViewModel dataViewModel)
    {
        _dataViewModel = dataViewModel;
        _windowManager = windowManager;
    }
    public string Title { get { return ApplicationTitle; } }
    public void BtnNew()
    {
        System.Diagnostics.Debug.WriteLine(_windowManager == null);
    }
    public void BtnLoad()
    {
        MessageBox.Show("Sorry, not yet implemented");
    }
}

但是窗口管理器和DataViewModel总是null,当我在互联网上搜索解决方案时,我发现它确实是我想要利用的WindowManager,以及关于MEFBootStrapper的一些东西?但我本以为我在WP7上使用的框架约定会比看起来要好得多。

Simple Container只是caliburn提供的配方。和我在WP7应用程序中使用的

Caliburn microwpf窗口管理

您没有向IOC容器注册WindowManager。请看一下caliburn . micro . helloindowmanager示例项目。

你可以在这里下载:http://caliburnmicro.codeplex.com/releases/view/70940