2012-11-21 22 views
1

我有一個實現INavigationAware接口的視圖。 該接口具有OnNavigationFrom方法即,根據MSDN http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.regions.inavigationaware.onnavigatedfrom(v=pandp.40).aspx如何取消PRISM中的導航請求?

當實施者正在導航離開調用。

現在,我想確保用戶沒有離開任何未保存的更改,如果有未保存的更改,詢問用戶是否要保存它們。此時我需要能夠以某種方式取消該導航請求,以防用戶想要停留並繼續編輯。

有關INavigationAware接口在MSDN上的文檔沒有說明應該如何使用這個接口。

我可能會非常錯誤,並且無法取消它,或者此接口不適用於此。

無論如何,我很感激有人告訴我如何讓用戶留下來,並繼續編輯一個導航請求已經啓動。

回答

4

我發現有另一個接口可以實現從INavigationAware繼承的技巧:「IConfirmNavigationRequest」。它具有ConfirmNavigationRequest方法,該方法使用布爾參數進行回調。如果我想取消導航請求我認爲這種回調有假的,如果我想留我把它與真正的:

continuationCallback(MessageBox.Show("Discard changes?", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) 

所以,問題的解決。感謝您的關注。

0

看一看這個鏈接:http://www.silverlightshow.net/items/Working-with-Prism-4-Part-4-Region-Navigation.aspx

作爲替代方案,如果您使用的RegionManager,也許你可以嘗試把一些布爾邏輯環繞RegionManager.RequestNavigate()方法。類似這樣的:

if(isDirty) 
{ 
    RegionManager.RequestNavigate(RegionConstants.ShellMainRegion, new Uri(typeof(YourView).Name, UriKind.Relative)); 
} 
else 
{ 
// Don't navigate 
} 

最後一個想法。如果您使用的是EventAggregator,那麼您可以發佈導航事件並進行相應的響應。