4

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

  1. 我需要屏幕导体还是窗口管理器就足够了?我已经尝试阅读有关该主题的所有内容,但我仍然不确定。

    如果没有填写一定数量的数据,我希望不关闭模式对话框的好处,所以我认为这将被归类为生命周期管理,从而迫使我使用导体,或者可以只使用 Window经理处理吗?我的印象是任何打开一个新窗口的事情都不能用指挥来完成?

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

谢谢

4

2 回答 2

1
  1. 我会在这里使用导体,是的,它可以显示模态对话框。查看Billy Hollis Hybrid Shell文章以查看使用对话框和脏跟踪(检查表单是否有要保存的信息)的示例应用程序,这里是我修改的WPF 应用程序的链接,它不使用MEF。
  2. 如果总是喜欢传递我的依赖项并通过构造函数注入它们,那么除非我真的需要,否则我不会引发事件,而且无论如何我会使用EventAggregatorthen 而不是正常的 .NET 事件,第一个解决方案更适合可测试性并明确应用程序的每个部分需要什么以及它做了什么。
于 2013-11-12T16:21:32.243 回答
0

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

    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;
}

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

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

于 2013-11-12T10:46:58.000 回答