Fire lasts forever 2023-03-01 13:57 采纳率: 0%
浏览 16

Prism导航到模板页面出错

使用Prism导航到一个模板页面,判断标签集合中是否有选中项,没有就添加后打开新的页面,但是点击左边的按钮后只能跳转到第一个标签页,请问这是为什么

img

img

  • 写回答

1条回答 默认 最新

  • 热说君子 2023-03-02 17:22
    关注

    这可能是因为你没有正确设置 Prism 的导航路径。当你使用 Prism 导航到一个模板页面时,它会自动为你创建一个导航路径,该路径由模板页面的唯一标识符组成。这意味着如果你导航到同一个模板页面两次,Prism 将不会创建一个新的页面实例,而是重用现有的实例。

    因此,当你点击左边的按钮跳转到第一个标签页时,Prism 导航到了之前创建的模板页面实例,而不是创建一个新的实例。这导致之前添加的标签仍然存在于标签集合中,因此没有创建新的标签页。

    为了解决这个问题,你需要使用不同的导航路径来创建每个模板页面的新实例。你可以在导航时将一些参数传递给 Prism,以便为每个实例创建不同的导航路径。例如,你可以添加随机的 GUID 作为参数,以确保每次导航都会创建一个新的实例。

    具体来说,你可以像这样导航到模板页面:

    var parameters = new NavigationParameters();
    parameters.Add("id", Guid.NewGuid().ToString());
    
    _navigationService.Navigate("TemplatePage", parameters);
    

    然后在模板页面中,你可以从导航参数中获取 ID 并将其用作导航路径的一部分:

    public TemplatePageViewModel(INavigationService navigationService)
    {
        _navigationService = navigationService;
    
        // 在构造函数中注册导航回调
        NavigationParameters parameters = null;
        _navigationService.Navigated += (sender, e) => parameters = e.Parameters;
    
        // 判断标签集合中是否有选中项
        if (SelectedIndex < 0)
        {
            // 没有选中项,添加一个新标签
            var id = parameters.GetValue<string>("id");
            var title = "New Tab";
            Tabs.Add(new TabViewModel(id, title, _navigationService));
            SelectedIndex = Tabs.Count - 1;
        }
    }
    

    通过这种方式,每次导航都会创建一个新的模板页面实例,并为其分配一个唯一的导航路径。这样,你就可以正确地添加新标签并打开新的页面了。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月1日

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?