2011-05-23 74 views
0

我試圖實現模塊化並且有一些複雜性。我實現了一個名爲ModuleA的模塊,它在初始化函數中顯示了新的childWindow;棱鏡模塊化重載機制

public ModuleA() 
{ 
    personViewModel = new PersonViewModel(); 
    detail = new ViewDetail(personViewModel); 
} 

public void Initialize() 
{ 
    detail.Show(); 
} 

我的問題是,我不能再顯示視圖,因爲重新加載函數的機會丟失。我的模塊按需加載,我的意思是我想在用戶單擊按鈕時加載模塊,因此我沒有機會在開始時加載模塊,並從其自己的事件控制其功能。然後我試圖從我的應用程序中展示視圖;

private void ButtonModelA_Click(object sender, RoutedEventArgs e) 
{ 
    this.moduleManager.LoadModule(MyBootstrapper.ModuleAName); 
    ChildWindow detail = new ModuleA.ViewDetail(new ModuleA.ViewModel.PersonViewModel()); 
    detail.Show(); 
} 

這樣,加載模塊變得不必要了。

有沒有一種方法可以根據需要從其中加載模塊並多次顯示其視圖?

回答

0

我不太清楚Silverlight中的工作原理,但我認爲這是對Prism的誤解。

棱鏡是基於地區。這意味着應用程序用戶界面由ContentControls(或其他支持區域的控件)組成,這些控件聲明爲區域。區域管理器現在將所有想要駐留在特定區域內的視圖添加到該區域中。

模塊只需要告訴其內部區域的特定模塊中實現的觀點希望居住的區域經理:

RegionManager.RegisterViewWithRegion("RegionName", typeof(View)); 

如果特定區域目前還沒有用戶界面的一部分,這是因爲包含主持該區域的控件不是用戶界面本身的一部分的視圖,則想要在該區域內重新播放的視圖不能放置在該區域內。區域經理只是不知道該地區。要顯示視圖,您必須手動將用於託管區域的控件添加到用戶界面。

另一種方法是手動添加特定區域到區域。使用這種方法,您不必將視圖註冊到區域經理。所以當區域經理髮現該區域保持空白時。如果您希望將意見納入取決於你必須手動添加到區域中的任何狀態或用戶操作的區域

IRegion region = RegionManager.Regions["RegionName"]; 
region.Add(new View(), "ViewName"); 

:現在,您可以手動添加視圖到使用區域管理的區域。看看股票交易者參考實施。它以一種非常簡單的方式解釋瞭如何將視圖添加到由用戶操作觸發的區域。

+0

我明白你的意思,我也檢查了股票交易實施。但是,在這個實現模塊中,當可用模塊被加載並且模塊的視圖之一被註冊到主視圖時。即使我使用區域,我需要在入口處註冊我的視圖,其中包含在模塊旁邊的初始化方法,因爲此方法調用一次。 – slatch 2011-05-23 09:17:40

+0

在我的場景中,我在主視圖頂部有按鈕,這些按鈕不是模塊的一部分。當我點擊按鈕時,我想要加載模塊並顯示視圖。直到這裏沒有問題。但是,當我再次單擊按鈕時,我無法再顯示我的視圖,因爲初始化方法調用了一次。我需要按需加載模塊並多次進入其內部。 – slatch 2011-05-23 09:17:50

+0

您不必多次初始化您的模塊,因爲它們已經被初始化。你只需要多次添加你的視圖到一個區域。 – PVitt 2011-05-23 09:20:44