编程语言
首页 > 编程语言> > c#-Caliburn Micro WPF窗口管理

c#-Caliburn Micro WPF窗口管理

作者:互联网

我想使用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,这让我觉得我已经赢了,但是当时我想继续前进,并进行另一个View / ViewModel设置,但是为了我的生命,我无法让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始终为null,当我在互联网上搜索解决方案时,我发现确实是我想利用的WindowManager,以及有关MEFBootStrapper的信息?但是我以为我在WP7上使用的框架约定将比看起来好得多.

简单容器只是caliburn.micro在其站点上提供的recipe,也是我在WP7应用程序中使用的容器

解决方法:

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

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

标签:wpf,c,caliburn-micro
来源: https://codeday.me/bug/20191208/2088567.html