2016-11-28 50 views
0

我想阻止用户从页面导航离开页面,如果我检测到他们还没有保存更改。注册NavigationService以防止NavigateAway(保存更改)

我尝试使用Unloaded方法上Page,但我相信这是为时已晚,我不能用e.Cancel = true防止导航。

我看到类似的一些问题已经和他们建议订阅该NavigationService.Navigate事件,并防止导航经过这里。我试图使用var nav = new NavigationService.GetNavigationService(this);来访问它,但我知道这是不正确的。

基本上我无法找到如何订阅和防止NavigationService导航的解释。

+0

为什么要尝试并预防它?为什么不在你的属性上实现一个IsDirty模式,当这个模式返回真时,询问用户他是否还想导航。这样你就永远不会碰到导航。 – SilentStorm

+0

@SilentStorm基本上就是我想要做的 - 我只是不确定如何在导航发生之前询问用户(例如关闭程序或单击新页面)。 – CBreeze

回答

0

你可以实现你的VM

public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback) 
    { 
     if (VM.HasChanges) 
     { 
      continuationCallback(false); 
     } 
     else 
      continuationCallback(true); 
    } 

的IConfirmNavigationRequest接口,但是这也要看你是如何导航到你的观点。您是使用VIEW发现还是查看注入? 如果您使用PRISM导航服务来管理您的导航(即使用RegionManager.RequestNavigate()函数)那么上述方法是好的。

+0

我只是使用'NavigationService.Navigate'导航到'NavigationFrame'内托管的页面。 – CBreeze