【问题标题】:How can a view cancel a navigation request in PRISM?视图如何取消 PRISM 中的导航请求?
【发布时间】:2012-11-21 23:32:06
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: silverlight silverlight-4.0 prism


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      看看这个链接: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,那么您可以发布导航事件并做出相应的响应。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        相关资源
        最近更新 更多