WPF Prism - 使用IConfirmNavigationRequest阻止Tab切换不起作用

时间:2012-11-16 07:37:12

标签: wpf prism

使用RequestNavigate(即以编程方式)在Views / ViewModels之间导航时,将按预期调用相应ViewModel上的IConfirmNavigationRequest方法。但是,如果通过单击选项卡切换TabControl区域中的视图,则不会调用这些方法。

这是预期和接受的行为吗?我是否能够实施棱镜行为以使其发挥作用?

任何建议都将受到赞赏。

更新

我决定根据Viktor的反馈更彻底地解释这个问题。如果用户在屏幕上有未保存的编辑,我想阻止导航。切换标签IMHO只是另一种导航方式。我希望Prism实现是一致的:以编程方式或以其他方式导航应该具有相同的行为。

如果我创建一个带有按钮的ItemsControl,点击这些按钮时使用RequestNavigate进行导航(以便有效地切换标签),它会起作用,但这不是问题的关键点。

1 个答案:

答案 0 :(得分:1)

我从您的问题中了解到,您希望切换选项卡调用IConfirmNavigationRequest。当您从实现此接口的view / viewModel导航时,将调用此接口的方法。

但是,在TabControl中切换选项卡时遇到的情况不是导航请求。 TabControl中的所有视图都已处理导航操作,并且所有视图都已在TabControl(您的区域)中。那么切换标签时你会怎么做?您只能激活您所在地区的视图。之前的活动视图已停用。

我真的不知道你想要完成什么。我无法想象为什么我会阻止某人切换标签。但是你可以通过使用IActiveAware接口来尝试。你可以从这个blog

中得到这个想法

修改

  1. 在停用视图之前,实施OnDeactivate询问用户是否要保存更改

  2. 实施OnActivate以调用RequestNavigate到现有的View。你可以阅读有关在棱镜中导航到现有视图documentation

  3. 的内容
  4. 禁用所有其他tabItem并在保存更改后再次启用它们(错误方法)

  5. 我真的不是专家,但我认为你没有更多的选择