2013-05-10 92 views
2

通常我只是App.xaml资源中的引导程序,但对于正在构建的应用程序,我需要执行代码才能在别处开始,然后在完成初始化代码后启动引导程序。Caliburn.Micro从代码启动引导程序?

如何启动引导程序?

我设置App.xaml中调用一个函数作为再这样做:

using System.Windows; 

namespace WpfApplication9 
{ 
    public partial class App : Application 
    { 
     private AdminBootstrapper b; 

     private void App_OnStartup(object sender, StartupEventArgs e) 
     { 
      //DO initialization 

      b = new AdminBootstrapper(); 
      b.Start(); 
     } 
    } 
} 

当我运行没有任何反应,我的观点不会出现。我知道view/viewmodel工作,因为如果我将引导程序放在App.xaml的resources部分中,它就会出现。

我在这里做错了什么?

+0

也许在启动阶段太早 - 这可能是它在资源中工作的原因:当资源被分析和加载时引导程序被实例化 - 可能OnStartup为CM找到注册东西所必需的位太早了。创建一个新引导程序的行为调用'Bootstrapper.Start',所以你不需要手动调用它 – Charleh 2013-05-11 00:06:34

+0

哦,你是否顺便在你的应用程序构造函数中调用'InitializeComponent'?这通常很重要! – Charleh 2013-05-11 00:08:32

+0

感谢您的回应,但我希望它在运行一段代码之前,它会尝试加载任何视图模型或视图。然后当我准备好的时候给它打电话。这就是为什么我试图在代码中启动它。 – Kelly 2013-05-11 00:53:14

回答

1

这不是“正确的”使用引导程序的方式,引导程序是你做安装的地方。关键是要提供一个Caliburn.Micro知道你将要建立的地方。没有看到你的引导程序,虽然不可能知道什么是错的。

根视图模型直到调用配置后才加载。这是您的可扩展性。如果你需要做复杂的配置,你可以在这里调用一些覆盖,然后派生出一个暴露这些方法的类。

一般来说,虽然你需要提供更多关于你在做什么之前,我可以给你一个具体的食谱。

+1

可能值得指向文档http://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper&referringTitle=Documentation显示自定义引导程序等 - 不确定为什么人们不会更频繁地阅读这些内容,因为99%的常见问题的答案都在文档中(它们不像参考文献那样构造,但所有信息都在那里) – Charleh 2013-05-13 09:03:36

+0

我们正在研究文档以便给他们为了使信息更容易找到而进行的修剪。但是,这些文档几乎包含了所有这些好东西。 :) – McDonnellDean 2013-05-13 09:05:07

+1

此外 - 如果您需要控制CM何时启动,您可以子类BoostrapperBase,因为此基类在实例化时不会调用“启动”。 – Charleh 2013-05-13 09:06:15

0

也许不是正确的方式(想从标记删除),但仍,这段代码似乎工作...

public partial class App : Application 
{ 
    MyBootstrapper _bootstrapper; 

    protected override void OnStartup(StartupEventArgs e) 
    { 
     _bootstrapper = new MyBootstrapper(); 
     base.OnStartup(e); 
    } 
} 

public class MyBootstrapper : BootstrapperBase 
{ 
    public MyBootstrapper() 
    { 
     Start(); 
    } 

    protected override void OnStartup(object sender, System.Windows.StartupEventArgs e) 
    { 
     DisplayRootViewFor<ShellViewModel>(); 
    } 
} 
+1

Caliburn.Micro在bootstrapper Start()中不存在。 我正在使用从BootstrapperBase继承的最新版本.. 他们的示例不会运行任何错误。 我该怎么办?起点从哪里来? – 2014-06-22 09:40:03

1

使用,而不是Start()Initialize()方法。我有同样的错误,并搜索了互联网,发现一个帖子说,使用Initialize()来代替。我在Caliburn.Micro文档中的示例应用程序上尝试过它,它对我很有帮助。