当 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
};
}
在我的 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
};
}