1

我有一个实现 INavigationAware 接口的视图。该接口具有 OnNavigationFrom 方法,即根据 MSDN http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.regions.inavigationaware.onnavigatedfrom(v=pandp.40).aspx

当实施者被导航离开时调用。

现在,我想确保用户没有留下任何未保存的更改,如果有未保存的更改,请询问用户是否要保存它们。此时我需要能够以某种方式取消该导航请求,以防用户想要留下并继续编辑。

MSDN 上关于 INavigationAware 接口的文档没有说明应该如何使用该接口。

我可能大错特错了,没有办法取消它,或者这个界面不是为此而设计的。

无论如何,如果有人告诉我如何让用户留下并继续编辑已启动的导航请求,我将不胜感激。

4

2 回答 2

6

我发现还有另一个接口可以解决问题:“ IConfirmNavigationRequest ”,它继承自 INavigationAware。它具有 ConfirmNavigationRequest 方法,该方法接受带有布尔参数的回调。如果我想取消导航请求,我用 false 调用该回调,如果我想留下来,我用 true 调用它:

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

所以问题解决了。感谢您的关注。

于 2012-11-21T15:32:06.900 回答
-1

Have a look at this link: http://www.silverlightshow.net/items/Working-with-Prism-4-Part-4-Region-Navigation.aspx

As an alternative, if you're using the RegionManager, maybe you can try putting some boolean logic around the RegionManager.RequestNavigate() method. Something like this:

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

One final thought. If you're using the EventAggregator, then you can publish a navigation event and respond accordingly.

于 2012-11-21T15:24:35.387 回答