2013-02-11 32 views
2

我正在研究一個WPF PRISM應用程序,它具有以下結構(我已簡化以更好地解釋而無需額外的圖層)。我使用Unity作爲我的DI/IOC在視圖之間導航WPF PRISM應用程序

  • AppMain - 引導程序
  • 桂 - 視圖和視圖模型
  • 數據 - 使用EF。

在桂,我有如下看法名稱:

  • 首頁
  • EmployeesView
  • OrdersView
  • 報告

我在外殼三個區域。 MainRegion - 主要內容 TopRegion - 導航菜單 BottomRegion - 狀態欄

我使用下面的方法來註冊視圖

IRegion region = _regionManger.Regions[RegionNames.MainRegion]; 
var mainView = _container.Resolve<Home>(); 
region.Add(mainView, ViewNames.HomeViewName); 
region.Activate(mainView); 

第一激活發生在模塊初始化方法頂部區域,主要和底部。

之後,我點擊按鈕時激活其他視圖。這只是現在的代碼。示例代碼在這裏:

IRegion region = _regionManger.Regions[RegionNames.MainRegion]; 
var reportView = region.GetView(ViewNames.ReportsViewName); 
if (reportView == null) 
{ 
    reportView = _container.Resolve<ReportsView>(); 
    region.Add(reportView, ViewNames.ReportsViewName); 
    region.Activate(reportView); 
} 
else 
{ 
     region.RequestNavigate(ViewNames.ReportsViewName); 
} 

問題1:如何可以做到這一點還是我做的方式是罰款的任何建議。 頂部菜單包含主頁,員工,訂單,報告按鈕。

在主頁中,我最近將員工在datagrid中的訂單視爲只讀訂單。 我想雙擊導航到OrderView並將選定的訂單傳遞給用戶。 PROBLEM2我不確定在哪裏做導航。

PROBLEM3:的另一個問題是,如果設置RegionMemberLifeTime的keepAlive假,INavigationAware方法不火。如果我沒有將KeepAlive設置爲false,則頁面不會刷新,因爲視圖模型沒有被調用。

我需要頁面刷新時,它是導航到,而不是陳舊,並處理任何確認提示給用戶時,視圖導航離開它。

非常感謝您的幫助。

+0

我上面關於regionamemberlifetime的評論是錯誤的。我認爲我的視圖名稱拼寫錯誤。我也看了棱鏡快速啓動和PRISM的樣品。導航是在視圖模型中完成的。一旦我明白了,我會糾正我的發帖和解決方案。謝謝 – isakavis 2013-02-12 16:18:46

回答

1

它肯定是來不及了,但...

問題1/2:有沒有你爲什麼在模塊初始化內容添加到區域特別的理由? 的常見的方式更像是 - >在XAML:

<ContentControl prism:RegionManager.RegionName="MainRegion" /> 

和ModuleInit。CS - >初始化()

_regionManager.RegisterViewWithRegion("MainRegion",() => _container.Resolve<MainView>()); 

問題3: 認爲必須實現INavigationAware,IRegionMemberLifetime 和SWICH區域,在視圖模型,你做的事:

_regionManager.RequestNavigate("RegionWhatever", new Uri("TestView", UriKind.Relative)); 

但要工作,你必須在ModulInit.cs其註冊爲與的viewName的對象,這樣的:

_container.RegisterType<Object, TestView>("TestView"); 

並用正確的RegionName一個ContentControl中定義I n當然是xaml