【发布时间】:2019-04-20 15:39:28
【问题描述】:
我在 ASP.NET Core 3 预览版 4 中使用服务器端 Blazor 组件。
我有一个父组件和子组件,使用相同的共享模型,如下所示:
型号:
public class CountModel
{
public int Count { get; set; }
public void Increment()
{
Count++;
}
}
父组件:
@page "/count"
<CascadingValue Value="currentCount">
<h1>Count parent</h1>
<p>Current count is : @currentCount.Count</p>
<button class="btn btn-primary" onclick="@currentCount.Increment">+1 from parent</button>
<CountChild></CountChild>
</CascadingValue>
@functions {
private CountModel currentCount = new CountModel();
}
子组件:
<h1>Count child</h1>
<p>Current count is : @currentCount.Count</p>
<button class="btn btn-primary" onclick="@currentCount.Increment">+1 from child</button>
@functions {
[CascadingParameter]
private CountModel currentCount { get; set; }
}
这是用于父子模型的同一个实例。 当模型从父模型更新时,两者都显示正确的增量值。 当它从孩子更新时,只有孩子显示正确的值。
如何在子组件更新父组件时强制刷新?
注意,这里我有一个更新模型的功能,但我希望解决方案在数据绑定到输入时起作用。
【问题讨论】:
-
调用
StateHasChanged通知更改怎么样?喜欢public void Increment() { Count++; StateHasChanged(); }看看 Chris Sainty 的帖子 3 Ways to Communicate Between Components in Blazor 他使用它。也相关:github.com/aspnet/Blazor/issues/420 -
@dani herrera,我认为这个问题与不调用 StateHasChanged 无关。看我上面的答案...
-
嗨 @Issac,我更喜欢委托而不是 CascadingParameter,我猜 Chris Sainty 级联示例完全符合这种情况。
-
是的,我也代表...
-
我知道有点晚了,但你可能想看看这个项目:github.com/dagmanolis/Blaast。它是您想要实现的目标的实现。
标签: c# asp.net-core blazor blazor-server-side