Я предполагаю, что компонент сетки получает следующее значение, правильно установленное [Inject] public AppData ShowData { get; set; }
после раскрывающегося изменения.
Проблема заключается в том, что в компоненте сетки нет обработчика событий или какого-либо кода, который будет обновлять данные сетки.
Событие OnInitializedAsync
сработает один раз, когда компонент сетки будет добавлен на страницу в первый раз, и все - он не будет вызываться снова, поэтому ваша служба не будет вызываться снова, чтобы получить новые данные сетки.
Я бы лично обработал это, чтобы выставить событие из компонента ShowSelect
, которое я могу использовать в компоненте сетки, чтобы снова вызвать свой сервис .
При этом мне действительно не понадобится AppState
, если это все, что в нем содержится.
Я бы также добавил параметр в мой API, чтобы сервер выполнял фильтрацию и отправьте мне обратно только соответствующие данные.
РЕДАКТИРОВАТЬ: Из-за комментариев, я сделал пример выставления события, вот оно (я обрезал некоторые углы в привязке данных, чтобы сделать его короче, b но я надеюсь, что это все еще иллюстрирует точку).
Сначала компонент ShowSelect
<TelerikDropDownList Value="@ShowId" Data="@Shows"
ValueChanged="@((int s) => ShowSelected(s))"></TelerikDropDownList>
@code {
List<int> Shows { get; set; } = new List<int> { 1, 2, 3 };
[Parameter]
public int ShowId { get; set; }
[Parameter]
public EventCallback<int> OnShowIdChanged { get; set; }
async Task ShowSelected(int showId)
{
ShowId = showId;
await OnShowIdChanged.InvokeAsync(ShowId);
}
}
Затем, потребляя это событие в основном компоненте с сеткой:
<ShowSelect ShowId="@ShowId" OnShowIdChanged="@ShowIdChangedHandler" />
<TelerikGrid Data="@MyData" Height="400px" Pageable="true">
<GridColumns>
<GridColumn Field="@(nameof(SampleData.Id))" Width="120px" />
<GridColumn Field="@(nameof(SampleData.Name))" Title="Employee Name" Groupable="false" />
<GridColumn Field="@(nameof(SampleData.GenerationDate))" Title="Benchmark - data generated at" />
<GridColumn Field="@(nameof(SampleData.ShowId))" Title="Show ID - see the dropdown" />
</GridColumns>
</TelerikGrid>
@code {
public List<SampleData> MyData { get; set; }
int ShowId { get; set; } // you may not even want this parameter here, but it helps with keeping the dropdown in sync with the main page
protected override async Task OnInitializedAsync()
{
ShowId = 2;//maybe you fetch that from a service too
MyData = await GetDataFromService(ShowId);
}
async Task ShowIdChangedHandler(int showId)
{
ShowId = showId;
MyData = await GetDataFromService(ShowId);
}
async Task<List<SampleData>> GetDataFromService(int showId)
{
await Task.Delay(500);
//simulate service here
var data = Enumerable.Range(1, 30).Select(x => new SampleData
{
Id = x,
Name = "name " + x,
GenerationDate = DateTime.Now,
ShowId = showId
}).ToList();
return await Task.FromResult(data);
}
public class SampleData
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime GenerationDate { get; set; }
public int ShowId { get; set; }
}
}