2013-11-10 21 views
3

我正在研究一个表单应用程序,我打算仅打开模态对话框。其目的主要是从用户的输入中创建对象以存储在数据库中。我是否需要屏幕导体(Caliburn Micro)

  1. 我是否需要一个屏幕导体或将窗口管理器足够吗?我已经尝试阅读所有关于该主题的文章,但仍然不确定。

    如果一定数量的数据没有填写,我想要关闭模式对话框的好处,所以我认为这将被归类为生命周期管理,因此迫使我使用指挥,或者可以只是窗口管理器处理它?我的印象是,任何打开新窗口的东西都不能由指挥员完成。

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

感谢

回答

1
  1. 我会在这里使用指挥,是的,它可以显示模态对话框。看看在Billy Hollis Hybrid Shell文章看一个示例应用程序,其中的对话和肮脏的跟踪(检查是否一个窗体有信息被保存)被使用,并且这里是链接为WPF application我修改不使用MEF。
  2. 如果总是喜欢身边通过我的依赖,并通过构造函数注入他们,所以我不会引发事件去,除非我真的需要了,反正我会用EventAggregator然后和不正常事件的.NET,第一个解决方案对可测试性更好,并明确了应用程序的每个部分需要什么以及它的功能。
+1

我知道这是很老了,但我很乐意看到“HelloScreens”应用程序的WPF版本。我跟着你的WPF修改版的链接,但它也是Silverlight。有没有这个地方的WPF版本? – Sean

+0

@Sean链接实际上指向WPF应用程序!这是在4shared.com –

+1

谢谢,这个应用程序是一个很大的帮助。我第一次下载了正确的应用程序,但是我刚刚下载了原版,并且我无意中解压了错误的! – Sean

0

我在这个漂亮的新的,但我会尽量帮助:当您运行与卡利微型构建的应用程序,窗口管理器会自动用于创建启动窗口。关于引导程序:

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/

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