2011-05-08 105 views
7

在每個視圖棱鏡RequestNavigate不起作用

public partial class View2 : UserControl, IRegionMemberLifetime, INavigationAware 
{ 

    public bool KeepAlive 
    { 
    get { return false; } 
    } 

    bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext) 
    { 
    return true; 
    } 
    void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext) 
    { 
    // Intentionally not implemented. 
    } 
    void INavigationAware.OnNavigatedTo(NavigationContext navigationContext) 
    { 
    this.navigationJournal = navigationContext.NavigationService.Journal; 
    } 

} 

初始化:

container.RegisterType<object, View1>("View1"); 
container.RegisterType<object, View2>("View2"); 

regionManager.RequestNavigate("Window1", new Uri("View1", UriKind.Relative)); 
regionManager.RequestNavigate("Window2", new Uri("View2", UriKind.Relative)); 

我下面的開發人員指南,如果視圖存在,它不會改變的觀點。

+0

你不應該註冊你的類型對基本接口,而不是'對象'類型? – 2011-05-08 09:53:04

+2

在開發者指南中,它用這種方式寫,我不知道哪個基礎接口,你的意思是IModule? – viewer20q 2011-05-09 11:54:34

+0

你指的是哪個開發人員指南? – 2011-05-09 13:54:17

回答

9

您確定視圖被容器填充了嗎?

我建議你提供的RequestNavigate方法的回調,這樣你就可以跟蹤你的觀點直通的NavigationResult會發生什麼:

regionManager.RequestNavigate 
(
    "Window1", 
    new Uri("View2", UriKind.Relative), 
    (NavigationResult nr) => 
    { 
     var error = nr.Error; 
     var result = nr.Result; 
     // put a breakpoint here and checkout what NavigationResult contains 
    } 
); 
+1

7年過去了,我在想我們可以高興地回答這個問題。很簡單,並幫助我輕鬆解決問題,然後我想我是誰回答它的人... – Shimmy 2018-03-04 11:08:47

2

我已經看到了,如果我實現IConfirmNavigateRequest和不要調用continutationCallback(true),導航會悄然失敗。

public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback) 
    { 
     //***Should have actual logic here 
     continuationCallback(true); 
    } 

雖然這可能不是你的情況,我想通了這一點通過棱鏡代碼調試。我建議你這樣做來解決你的問題。刪除每個相關項目中對以下內容的引用。

  • Microsoft.Practices.Prism
  • Microsoft.Practices.Prism.Interactivity
  • Microsoft.Practices.Prism.MefExtensions
  • Microsoft.Practices.Prism.UnityExtensions

然後添加來自PrismLibrary DeskTop,Silverlight或Phone目錄(您安裝PRISM的地方)的項目。然後參考這些項目。如果你想創建一個新的觀點,並在每次調用RequestNavigate()時添加到您所在的地區,IsNavigationTarget()必須返回false,而不是真正的

bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext) => true; 

+0

謝謝!那正是我的問題,我曾經在一個小時內浪費了我的時間。 – Golvellius 2013-04-30 09:51:33