我有一个基于标准 Blazor 模板的相当简单的设置。我已经进行了大量的谷歌搜索,但我不知道如何正确地构建它。我理解一般参数流向后代,事件流回父母。我已经让 CascadingValue 将参数发送到 Index.razor 页面就好了,但是我无法理解如何将自定义组件(FilterMenu)中的按钮(单击)连接到 Index.razor 页面上的方法它被埋在 MainLayout @Body 标签中?
编辑 1:这是针对 WebAssembly 的。
请帮我理解!
我的设置如下:
--FilterMenu.razor--
<div class="filterMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<button class="btn-success" @onclick="ApplyFilters">Do Work</button>
</li>
</ul>
</div>
@code {
[Parameter]
public EventCallback<string> OnClick_ApplyFilters { get; set; }
private async Task ApplyFilters()
{
var filters = new FilterObject() { SomeFilter = "SomeValue"};
////TODO: This needs to flow through to the @Body (index.razor page) where we'll get the data and display for that page/component - But How!?
}
}
--MainLayout.razor--
<div class="container-fluid">
<div class="row">
<div class="col-md-2">
<FilterMenu OnClick_ApplyFilters="ApplyFilters"></FilterMenu>
</div>
<CascadingValue Name="FilterValues" Value="@filters">
<div class="content px-4">
@Body
</div>
</CascadingValue>
</div>
</div>
--Index.razor--
@page "/"
<div class="mainContent">
<div class="col-md-10">
<div class="row">
<div class="col-md-12">
<div>
Sample Data Grid here
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
Sample Data 2 Grid here
</div>
</div>
</div>
</div>
</div>
@code {
[CascadingParameter(Name = "FilterValues")]
protected Filters filters { get; set; }
public async Task GetGridData()
{
//TODO: How to get this to execute from the button click in the FilterMenu component!?
await LoadSampleData(filters);
await LoadSampleData2(filters);
}
private async Task LoadSampleData(Filters filters)
{
//GetData
}
private async Task LoadSampleData2(Filters filters)
{
//GetData
}