【问题标题】:Update List<model> items if there are any changes in UI如果 UI 有任何变化,则更新 List<model> 项
【发布时间】:2022-01-26 16:12:21
【问题描述】:

如果不展示完整的概念,这有点难以解释,但我会尝试。我在Record.razor.cs - this.PersonellData 有员工表。我正在通过这种方法将新员工添加到表中:

private void AddNew()
{
  this.PersonellData.Add(new Personell
  {
    Id = i + 1,
    Name = "John " + i,
    From = DateTime.Today + new TimeSpan(8, 30, 0),
    Category = this.selectedCategoryValue,
  });

  this.DiaryRecord.Employees = new List<Personell>(this.PersonellData);

  i++;
}

但是,在添加员工后,我想在 UI 中更改类别和(从)时间。我可以在 UI 中做到这一点,但 List&lt;model&gt; 本身的数据没有改变。我在

处设置断点
private async Task OnCreateNewDiaryRecord()
{
  if (true)
  {
    this.DiaryRecordModel = new DiaryRecord
    {
      Id = this.DiaryRecordModel.Id,
      Title = this.DiaryRecordModel.Title,
      Description = this.DiaryRecordModel.Description,
      Employees = this.DiaryRecordModel.Employees,
      Date = this.SelectedDate,
    };

    await OnInitializedAsync();
  }
  isDialogVisible = false;
}

在 Index.razor.cs 中,我没有在 UI 中对列表中的每个员工进行任何更改。有什么建议如何让它工作吗?我应该为每个 UI 项添加 OnChange 之类的方法,但是如何继续更新实际列表?

这里是 DiaryRecord.cs:

  public class DiaryRecord
  {
    public Guid Id { get; set; }
    public string Title { get; set; }

    public ICollection<Personell> Employees { get; set; }
  }

这是列表项的 UI 部分

    <Table DataSource="this.PersonellData" RowClassName="@(_=>"editable-row")" Bordered Size=@TableSize.Small>
      <Column Title="From" TData="DateTime">
        <TimePicker TValue="DateTime?" @bind-Value="@context.From" OnChange="this.OnDateValueChanged" />
      </Column>
      <Column Title="Category" DataIndex="@nameof(context.Category)" TData="string">
        <Select DataSource="@this.CategoryList"
                @bind-Value="@this.selectedCategoryValue"
                LabelName="@nameof(Category.CategorySymbol)"
                ValueName="@nameof(Category.CategorySymbol)"
                DefaultActiveFirstItem="false"
                EnableSearch
                OnSelectedItemChanged="this.OnSelectedCategoryChangedHandler">
        </Select>
      </Column>
    </Table>

我已尝试使用OnChange="this.OnDateValueChanged",但不知道如何继续。

【问题讨论】:

    标签: c# html blazor antd


    【解决方案1】:

    不要从您自己的代码中调用 OnInitializedAsync()。当你这样做时,它不会触发 UI 更新。

    //await OnInitializedAsync();
    await InvokeAsync(StateHasChanged);  // Invoke probably not needed. Just in case.
    

    【讨论】:

    • 如果不需要,请将其删除,尤其是因为您没有提供任何解释。
    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多