我有一个实现INavigationAware接口的视图。 根据MSDN http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.regions.inavigationaware.onnavigatedfrom(v=pandp.40).aspx,
,此接口具有OnNavigationFrom方法当实施者被导航离开时被调用。
现在,我想确保用户没有保留任何未保存的更改,如果有未保存的更改,请询问用户是否要保存更改。此时我需要以某种方式取消该导航请求以防用户想要留下并继续编辑。
MSDN上的INavigationAware接口上的文档并没有说明如何使用此接口。
我可能非常错误,没有办法取消它,或者这个界面并不意味着。
无论如何,如果有人告诉我如何让用户留下并继续编辑一个导航请求,我感激不尽。
答案 0 :(得分:4)
我发现还有另一个界面可以解决这个问题:“IConfirmNavigationRequest”继承自INavigationAware。它具有ConfirmNavigationRequest方法,该方法使用布尔参数进行回调。如果我想取消导航请求,我将该回调称为false,如果我想留下,我将其称为true:
continuationCallback(MessageBox.Show("Discard changes?", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
所以问题解决了。谢谢你的关注。
答案 1 :(得分: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,则可以发布导航事件并做出相应的响应。