我是否需要屏蔽导体(Caliburn Micro)

时间:2013-11-10 00:23:24

标签: c# wpf caliburn.micro

我正在开发一个单独的表单应用程序,我打算只打开模式对话框。其目的主要是从用户那里获取输入以创建存储在数据库中的对象。

  1. 我是否需要屏幕导体或窗口管理器是否足够?我已尽力阅读有关该主题的所有内容,但我仍不确定。

    如果没有填写一定数量的数据,我希望不关闭模态对话框的好处,所以我认为这将被归类为生命周期管理,从而迫使我使用指挥,或者可以只是窗口管理器处理它?我的印象是,打开一个新窗口的任何东西都不能与售票员一起完成?

  2. 此外,就wpf而言哪个更好:我已经阅读过将窗口管理器的一个实例传递给需要它的每个类,还有关于引发一个类侦听的事件并打开一个窗口如事件中所指定。后者会不好,因为它会在每个类和事件处理类之间形成紧密的关系?

  3. 由于

2 个答案:

答案 0 :(得分:1)

  1. 我会在这里使用指挥,是的,它可以显示模态对话框。查看Billy Hollis Hybrid Shell文章,查看一个示例应用程序,其中使用了对话框和脏跟踪(检查表单是否有要保存的信息),这里是{的链接{3}}我修改了哪些不使用MEF。
  2. 如果总是喜欢传递我的依赖关系并通过构造函数注入它们,那么除非我真的需要,否则我不会去引发事件,无论如何我会使用WPF application然后而不是正常的.NET事件,第一个解决方案更适合可测试性,并清楚地表明应用程序的每个部分需要什么以及它做什么。

答案 1 :(得分:0)

我对此很新,但我会尽力提供帮助:当您运行使用Caliburn Micro构建的应用程序时,Window Manager会自动用于创建启动窗口。关于引导程序:

    protected override void Configure()
    {
    container = new CompositionContainer(new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()));

    CompositionBatch batch = new CompositionBatch();

    batch.AddExportedValue<IWindowManager>(new WindowManager());
    batch.AddExportedValue<IEventAggregator>(new EventAggregator());
    batch.AddExportedValue(container);

    container.Compose(batch);
  }

您可以使用窗口管理器的此实例来管理不同的对话框。然后你只需要在所需的视图模型中导入窗口管理器:

private readonly IWindowManager _windowManager;


[ImportingConstructor]
public FooViewModel(IWindowManager windowManager)
{
  _windowManager = windowManager;
}

请查看校准微文档(http://caliburnmicro.codeplex.com/documentation)的样本以及此博客:http://www.mindscapehq.com/blog/index.php/2012/03/13/caliburn-micro-part-5-the-window-manager/

视图模型之间的通信由事件聚合器完成。