2009-09-09 67 views
4

我在Wpf中開始一個新項目,現在正在研究使用Prism。現在我只是試圖使用Prism來設置應用程序的導航。不幸的是我缺乏與框架的經驗使得它有點難以上手..使用Prism在Wpf應用程序中導航

更精確地瞭解我的第一個挑戰,我有一個「導航/菜單」區和「主」區域的應用程序。導航區域對於所有不同的主要區域視圖都是相同的,因此我在shell.xaml中定義菜單。點擊任何菜單項時,我想使用Prism將視圖添加到該區域。第一;這是一個典型的使用棱鏡的東西嗎?如果是這樣;典型的方法是什麼?我的意思是在更多的結構層面上。

我的印象是,Prism將使我的應用程序的可擴展性最終得到提升,並且我看到我從中獲得了其他一些優勢 - 比如IoC容器。所以,我想用它 - 如果我只能通過第一步驟得到..

回答

4

我已經得到了使用多一點的CAG的感覺模塊有助於菜單以及如何添加視圖區域的樣本。它應該讓事情更清楚一點。

http://dl.getdropbox.com/u/376992/CAGMenus.zip

希望這有助於 安德森

+0

Thx。我已經有了這個樣本。我瞭解了這些概念,但我無法真正理解它並將它們放在我自己的應用程序中。但經過一些進一步的調查,這個樣本真的幫助了我 - 所以我現在走在了正確的軌道上。 – stiank81 2009-09-10 08:48:55

+0

很高興我能幫到你。 – 2009-09-10 16:52:55

+0

將此標記爲答案,因爲提供的示例代碼是導致解決方案的原因。謝謝! – stiank81 2009-09-10 19:47:36

3

Bumbuska,

棱鏡將是一個偉大的方式爲你實現這個功能,這是很容易做到,一旦你瞭解校長。

我會做的方式是在你的主區的啓動事件添加事件偵聽器。當您在菜單中選擇您的項目時,您將觸發該事件。發生這種情況時,您的主區域將處理該事件,並清除主區域中的當前視圖。然後創建您想要使用的新視圖並添加它。

你的主要區域應該是這個樣子:

public void Initialize() 
{ 
    Events.PageEvents.ClickedEvent1 ce1 = this.eventAggregator.GetEvent<Events.PageEvents.ClickedEvent1>(); 
    ce1.Subscribe(LoadView, ThreadOption.UIThread, true); 
} 

private void LoadView(Events.HomePageEvents.Clicked clicked1) 
{ 
    IRegion mainRegion = RegionManager.Regions["MainRegion"]; 
    foreach (object view in new List<object>mainRegion.Views)) 
    { 
     RegionManager.Regions["MainRegion"].Remove(view); 
    } 

    IModule firstModule = Container.Resolve<Modules.FirstModule>(); 
    firstModuleModules.Initialize(); 

} 

我希望點,你在正確的方向。如果您需要更多信息,請告訴我。

+0

THX!這對我很有幫助。我現在就像我想要的那樣工作,但我沒有使用事件聚合。我在菜單項上使用了命令綁定,這是一些viewModel對象,它包含關於在主區域中打開哪個組件的信息。這對我來說似乎很好 - 但事件聚合是一種更受歡迎的方式嗎? Thx爲區域清算示例。我希望找到一個在視圖中設置元素的函數,而不是清除所有的exise並添加新的元素。但你的例子說明了典型的方法? – stiank81 2009-09-10 08:52:40

+1

這實際上取決於你的應用程序是否命令或事件更好。我認爲主導航菜單命令可能會更好。 您可以在您的主要區域中激活所有視圖,並激活您想要使用的視圖。再次,這將取決於您的應用程序,但對我來說,我不會加載可能無法使用的東西。 – 2009-09-10 15:07:01

+0

好的 - 對我來說,現在看來沒有事件似乎是合理的。也許稍後我會改變我的看法,但現在它仍然有效。 Thx再次爲您提供幫助! – stiank81 2009-09-10 19:46:54