【发布时间】:2020-07-17 15:43:28
【问题描述】:
我的MainLayout.razor 组件中有一个侧边抽屉,用于设置/更改某些值,然后在整个应用程序中使用这些值。
<CascadingValue Value="@appValues" Name="AppValue">
<SideDrawer OnUpdate="@RefreshPage"></SideDrawer>
<div class="content px-4">
@Body
</div>
</CascadingValue>
当我更新 SideDrawer 中的值时,我会执行 EventCallback,通过它我可以更新变量,然后这些变量可以用作整个页面组件的级联值。
@code{
public AppValues appValues = new AppValues();
protected void RefreshPage()
{
appValues.value1 = somevaluefromsidedrawer;
appValues.value2 = someothervaluefromsidedrawer;
StateHasChanged();
}
}
并且这些级联值在页面组件中更新得很好。但问题是,在页面组件中,有一种方法(比如LoadData())应该根据这些级联值更新某些数据集。
@code{
[CascadingParameter(Name = "AppValue")]
protected AppValues appValues { get; set; }
protected void RefreshCurrentPage()
{
LoadData(appValues.value1);
}
}
理想情况下,我希望能够从MainLayout.razor组件中的RefreshPage()方法调用页面组件中的RefreshCurrentPage()方法,这样页面组件中的所有数据集都会根据更新后的内容进行刷新价值观。
有可能做这样的事情吗?
【问题讨论】:
-
您可以查看this blog post,它概述了一种相当简单的方法来触发更远的 DOM 树上的渲染。您可能会看到的第二件事是使用服务来触发重新渲染。我有一个答案here,应该可以让你指出正确的方向。
-
感谢@NikP。我将开始研究您和 enet 的答案,看看哪个更适合我的需要。但它们在学习做这些事情的新方法方面非常有帮助。