Caliburn Micro WPF 窗口管理

2023-12-29

我想使用 caliburn.micro 启动一个 WPF 应用程序,这样我就可以尽可能地使用 TDD,我之前在 WP7 中使用过 caliburn.micro,但 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,这让我认为我赢了,但我当时想继续前进并进行另一个视图/视图模型设置,但在我的一生中,我无法将 WindowManager 传递到我的 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");
    }
}

但是Window Manger和DataViewModel总是为空,当我在网上搜索解决方案时我发现它确实是我想要利用的WindowManager,以及有关MEFBootStrapper的东西?但我本以为我在 WP7 上使用的框架约定会比看上去的效果好很多。

简单容器只是由 calibburn.micro 在其网站上提供,以及我在 WP7 应用程序中使用的那个


您没有向 IOC 容器注册 WindowManager。 看一下 Caliburn.Micro.HelloWindowManager 示例项目。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Caliburn Micro WPF 窗口管理 的相关文章

随机推荐