2013-05-10 89 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文檔中的示例應用程序上嘗試過它,它對我很有幫助。