切换页面时Navbar的List清空后无法添加多个项的技术问题
解决方案
问题根源
你当前的核心问题是页面切换时没有在正确时机清空列表,或是清空后新页面的多个name未被正常追加。之前调用Clear()后仅能添加单个项,大概率是因为清空操作的时机不对(比如每次接收name都清空),导致最终只保留了最后一个传入的值。
具体实现步骤
- 注入路由管理器监听页面切换
在NavMenu.razor顶部注入NavigationManager,用来捕捉路由变化(即页面切换行为):
@inject NavigationManager NavManager @implements IDisposable
- 订阅路由变化事件,切换时清空列表
修改OnInitialized方法,新增路由变化的订阅逻辑:
protected override void OnInitialized() { AddData.OnNameSent += HandleNameSent; // 监听路由变化,页面切换时自动清空列表 NavManager.LocationChanged += OnLocationChanged; } // 路由变更触发的清空逻辑 private void OnLocationChanged(object sender, LocationChangedEventArgs e) { ListofItems.Clear(); StateHasChanged(); }
- 完善资源清理,避免内存泄漏
更新Dispose方法,取消路由事件的订阅:
public void Dispose() { AddData.OnNameSent -= HandleNameSent; NavManager.LocationChanged -= OnLocationChanged; }
- 保留原有添加逻辑
HandleNameSent方法无需改动,新页面切换后触发的多次OnNameSent事件会自动将多个name追加到清空后的列表中:
private void HandleNameSent(string name) { ListofItems.Add(name); StateHasChanged(); }
额外优化建议
如果新页面可以一次性返回多个name,建议修改AddData的事件定义,直接传递List<string>而非单个字符串,减少事件触发次数:
// 修改AddData中的事件 public event Action<List<string>> OnNamesSent; // 触发事件时传入完整列表 OnNamesSent?.Invoke(new List<string> { "item1", "item2", "item3" }); // NavMenu中对应处理方法 private void HandleNamesSent(List<string> names) { ListofItems.Clear(); ListofItems.AddRange(names); StateHasChanged(); }
这样页面切换时只需触发一次事件,就能完成清空和批量添加,逻辑更简洁高效。
内容的提问来源于stack exchange,提问作者Sarahrb
相关产品推荐
相关产品推荐

