3

我有一个包含三个区域的应用程序。区域 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 加载到各个区域之前确认导航。

我已经在 Module 1 中的 View1B 的视图模型上成功实现了 IConfirmNavigationRequest ,但这仅控制区域 B 的导航。如果用户取消导航请求,区域 B 正确地保留为 View1B,但 View2C 被加载到区域 C 中。

关于如何为两个区域确认一次导航的任何建议?

4

1 回答 1

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 );
        }
    }

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

于 2015-02-16T17:30:54.930 回答