2012-05-11 43 views
3
container.RegisterType<object, LabStatusView>("LabStatusView"); 
Uri LabStatusViewUri = new Uri("pack://application:,,,/LabStatus;component/LabStatusView.xaml",  
UriKind.Absolute); 
regionManager.RequestNavigate("HorizonNavigatorView",LabStatusViewUri,NavigationCompleted); 

我正在使用它導航到LabStatusView,這看起來很簡單。使用棱鏡,MVVM,Unity查看切換導航

ObjectStates執行requestNavigate後:

  1. regionManager.Regions.ActiveRegion包含類型的一個對象,而不是LabStatusView 「對象」。
  2. 唯一使用Unity的怪癖是我已經使用RegiterType方法的重載註冊了我的類型。

任何建議我在這裏做錯了嗎?

回答

3

導航是比在你的代碼更容易做到。這是我爲一個項目做的。

//Register your View on Startup 
container.RegisterType<object, LabStatusView>("LabStatusView"); 

//Navigation works like this 
var labStatusView = new Uri("LabStatusView", UriKind.Relative); 
regionManager.RequestNavigate("HorizonNavigatorView", labStatusView); 

你可以試試看嗎?

也有很多人使用靜態類的區域和視圖名稱,以避免「魔術字符串」。 就是這樣。

public class RegionNames 
{ 
    public const string HorizonNavigatorView = "HorizonNavigatorView"; 
} 
public class ViewNames 
{ 
    public const string LabStatusView = "LabStatusView"; 
} 
+0

我無法在URI構造函數中使用LabStatusView,因爲它駐留在不同的程序集中。這就是爲什麼我需要使用pack:格式。我試過這個,但沒有奏效。導航後,它始終有一個對象類型的引用。 –

+0

我發現我錯過了什麼。我們用來註冊容器的名稱是我創建URI時使用的名稱。他們必須是相同的。我認爲我必須在創建URI時給出類的路徑。 –

+0

謝謝你使用'object'類型映射 - 這對我有所幫助 – BCA