使用Prism导航到一个模板页面,判断标签集合中是否有选中项,没有就添加后打开新的页面,但是点击左边的按钮后只能跳转到第一个标签页,请问这是为什么
Prism导航到模板页面出错
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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; } }
通过这种方式,每次导航都会创建一个新的模板页面实例,并为其分配一个唯一的导航路径。这样,你就可以正确地添加新标签并打开新的页面了。
解决 无用评论 打赏 举报
悬赏问题
- ¥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实现文字转语音?