WPF Prism确认多个区域的导航请求

时间:2015-02-16 16:20:22

标签: wpf prism region-management

我对三个地区有一个应用。区域A是用于保存应用程序中模块的导航项的导航区域。区域B和C是模块的内容区域。我还有两个模块Module1和Module2,每个模块都有一个加载到区域A的导航项控件。 区域A包含NavigationItemMod1Control和NavigationItemMod2Control。

NavigationItemMod1Control绑定到一个命令,该命令将view1B加载到区域B,将view1C加载到区域C(NavigationItemMod2Control具有类似的命令)。命令执行方法如下所示:

public void Execute(object parameter)
 {
        // Show View 1B
        var view1BUri = new  Uri(Module1RegionNames.ViewBControl, UriKind.Relative);
        regionManager.RequestNavigate(RegionNames.ViewBArea, view1BUri );

        // Show View 1C
        var view1CUri = new Uri(Module1RegionNames.ViewCControl, UriKind.Relative);
        regionManager.RequestNavigate(RegionNames.ViewCArea, view1CUri );
}

当我点击NavigationItemMod2Control时,我想在将视图2B或视图2C加载到相应区域之前确认导航。

我已在模块1中的View1B的viewmodel上成功实现了IConfirmNavigationRequest,但这仅控制区域B的导航。如果用户取消导航请求,则区域B正确保留为View1B,但View2C将加载到区域C.

有关如何确认两个地区的导航一次的任何建议?

1 个答案:

答案 0 :(得分:1)

请求导航带有支持回调的重载:

var navigationParameters = new NavigationParameters();
                    navigationParameters.Add("RelatieId", _CurrentRelatie.RelatieId);
regionManager.RequestNavigate("RelatieDetailRegion",
                        new Uri("RelatieDetail", UriKind.Relative), NavigationCallback, navigationParameters);

void NavigationCallback(NavigationResult nr)
    {
        _logger.Log("NavigationCallback", Category.Info, Priority.Medium);
        if (nr.Result.Value == true)
        {

             //navigate region C, so this is your code
             var view1CUri = new Uri(Module1RegionNames.ViewCControl, UriKind.Relative);
             regionManager.RequestNavigate(RegionNames.ViewCArea, view1CUri );
        }
    }

这是基于我的代码片段,您必须稍微调整一下,例如不要使用您不使用的导航参数。