当 EditForm 的模型更改时,列表会更新。如何预防?

List gets updated when Model of EditForm changes. How to prevent?

在我的 table 中,我有一个名为 PersonList 的列表操作类型 Person。单击一行时,类型 Person 的另一个对象(模型)将设置为该行的值,因此我的 EditForm 会更新为该值。到目前为止一切顺利。

但是当我更改 EditForm 中的 te 值时,我的列表也会更新为该值。

这怎么可能?如何预防?

非常感谢!

<h3>Component</h3>

<table>
   <thead>
       <tr>
           <th>ID</th>
           <th>Name</th>
           <th>Age</th>
       </tr>
   </thead>
   <tbody>
       @foreach (var person in PersonList)
       {
           <tr @onclick="@(() => ActivateItem(person))">
               <td>@person.Id</td>
               <td>@person.Name</td>
               <td>@person.Age</td>
           </tr>
       }
   </tbody>
</table>

<EditForm Model="Model">
    <InputText @bind-Value="Model.Name" />
    <InputNumber @bind-Value="Model.Age" />
</EditForm>


@code {

    private List<Person> PersonList = new List<Person>();
    private Person Model = new Person();

    private void ActivateItem(Person person)
    {
        Model = person;
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }

    protected override void OnInitialized()
    {
        PersonList.Add(new Person
        {
            Id = 1,
            Name = "Jack",
            Age = 20
        });

        PersonList.Add(new Person
        {
            Id = 2,
            Name = "Paul",
            Age = 25
        });

        PersonList.Add(new Person
        {
            Id = 3,
            Name = "Brad",
            Age = 30
        });
    }
}

嗯,这是因为您保留了对对象的引用,而绑定值是双向绑定。一点都不奇怪。

一种解决方案是使用单向绑定,另一种解决方案是通过实例化一个新对象从对象中删除引用。像这样:

private void ActivateItem(Person person)
    {
        Model = new Person
        {
              Id = person.Id,
              Name = person.Name,
              Age = person.Age
         };
    }