使用RequestNavigate(即以编程方式)在Views / ViewModels之间导航时,将按预期调用相应ViewModel上的IConfirmNavigationRequest方法。但是,如果通过单击选项卡切换TabControl区域中的视图,则不会调用这些方法。
这是预期和接受的行为吗?我是否能够实施棱镜行为以使其发挥作用?
任何建议都将受到赞赏。
更新
我决定根据Viktor的反馈更彻底地解释这个问题。如果用户在屏幕上有未保存的编辑,我想阻止导航。切换标签IMHO只是另一种导航方式。我希望Prism实现是一致的:以编程方式或以其他方式导航应该具有相同的行为。
如果我创建一个带有按钮的ItemsControl,点击这些按钮时使用RequestNavigate进行导航(以便有效地切换标签),它会起作用,但这不是问题的关键点。
答案 0 :(得分:1)
我从您的问题中了解到,您希望切换选项卡调用IConfirmNavigationRequest。当您从实现此接口的view / viewModel导航时,将调用此接口的方法。
但是,在TabControl中切换选项卡时遇到的情况不是导航请求。 TabControl中的所有视图都已处理导航操作,并且所有视图都已在TabControl(您的区域)中。那么切换标签时你会怎么做?您只能激活您所在地区的视图。之前的活动视图已停用。
我真的不知道你想要完成什么。我无法想象为什么我会阻止某人切换标签。但是你可以通过使用IActiveAware接口来尝试。你可以从这个blog
中得到这个想法修改强>
在停用视图之前,实施OnDeactivate询问用户是否要保存更改
实施OnActivate以调用RequestNavigate到现有的View。你可以阅读有关在棱镜中导航到现有视图documentation。
禁用所有其他tabItem并在保存更改后再次启用它们(错误方法)
我真的不是专家,但我认为你没有更多的选择