【发布时间】:2020-08-13 17:43:38
【问题描述】:
我有一个带有声明为 CascadingValue 的 Order 对象的页面。该父页面有 2 个子页面,一个包含订单信息,另一个包含订单上的订单项列表。这些同级页面中的每一个都通过 CascadingValue 使用订单信息。
订单信息页面上有一个按钮,可以清除订单上的所有订单项。该按钮有效,并且通过调用 Order CascadingValue 上的 ClearLineItems 方法清除所有行项目。
不过,包含订单项列表的页面并未刷新。它仍然显示现在已删除的订单项。一个页面如何告诉它的兄弟页面它的 StateHasChanged?
要绘制行项目,我有一个名为 LineItemDetail 的控件,我将其绘制成这样。 (每一行都有一个按钮,可以让用户只删除那一行,就是DeleteLine参数。逐行删除正常工作)
@foreach (var row in CurrentOrder.LineItems)
{
<LineItemDetail CurrentLine=@row DeleteLine=@DelLine></UpchargeInfo>
}
真正更大的问题是如何将消息从一个 Blazor 页面发送到另一个页面。类似于消息总线,但在 Blazor 内部。
这说明了问题所在。从子表单添加行项目不会更新父表单,也不会更新其他兄弟表单。必须主动刷新父级,这将级联并更新子级。 https://github.com/bradirby/BlazorChildFormUpdates
【问题讨论】:
-
嗨布拉德,服务器端还是 WebAssembly?澄清页面不是组件对吗?
-
这是网络程序集
-
我得到了这个处理事件(参见上面的 github 链接),但这不是一个强大的解决方案。如果一个表单有几个级别的深度,那么传递回调引用将很快变得困难。如果有人有更好的解决方案,请发布。
标签: blazor