如何知道c#中泛型列表的UI端更新了哪些值
本文关键字:更新 UI 何知道 泛型 列表 | 更新日期: 2023-09-27 18:10:46
场景:我在silverlight中有一个应用程序,在那个应用程序中,我们有一个列表,它与各自的ViewModel绑定在那个ViewModel中,我有三个(ID, Name和Age)属性,其中一个(Age)属性值将由用户从视图或UI更新。UI显示了每个列表项中的记录列表,其中NAME为只读,AGE为可编辑。(AGE在列表Item中有一个文本框,它与AGE属性有双向绑定)。当用户从UI端更新AGE值时,由于INotifyPropertyChanged,我在绑定列表本身中获得更新值。
在这种情况下,我只想更新那些在列表中被更新的记录,我不想将整个列表发送回服务器。
public class EmpViewModel : INotifyPropertyChanged
{
public List<EmpModel> Employees { get; set; }
public ICommand SaveCommand { get; set; }
private List<EmpModel> _employees;
public EmpViewModel()
{
SaveCommand = new BaseCommand(UpdataInfo, CanUpdataInfo);
this.Employees = new List<EmpModel>();
_employees = new List<EmpModel>();
}
public void GetEmployeeInfo()
{
Employees = new List<EmpModel>
{
new EmpModel { ID =1, NAME="Amar", AGE=0},
new EmpModel { ID =2, NAME="Sameer", AGE=0},
new EmpModel { ID =3, NAME="Ram", AGE=0},
new EmpModel { ID =4, NAME="Rahim", AGE=0}
};
_employees = Employees;
}
private void UpdataInfo(object param)
{
// one way to update information
// why --> when user update the from the UI side _employees.AGE value also get update.
List<EmpModel> difference = this.Employees.Except(_employees) as List<EmpModel>;
foreach (var item in difference)
{
// save only updated records
}
// second way to updat information
// (?) how to to know what are the values get updated from the UI side in Generic list in C#
}
private bool CanUpdataInfo(object param)
{
return true;
}
private void PropertyChangedEvent(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
/// <summary>
/// Property Changed EventHandler
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
}
public class EmpModel
{
public int ID { get; set; }
public string NAME { get; set; }
public int AGE { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyEvent(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
所以这里是我的问题UpdataInfo()方法。
1)为什么——>当用户从UI端更新值_employees。年龄价值也得到了更新。所以我无法识别。
2)(?)如何知道从UI端更新的值是什么在c#的泛型列表中
请让我知道如何解决这个问题。
我见过在模型(基)类中包含IsDirty
属性的技术。
public class ModelBase
{
public bool IsDirty { get; set; }
}
public class EmpModel : ModelBase
{
public int ID { get; set; }
public string Name {get; set;}
public int Age
{
get { return _age; }
set
{
_age = value;
// Only if change comes from the user...
IsDirty = true;
}
}
private int _age;
}
当用户改变UI中的一个值(例如Age
)时,您将IsDirty
设置为true。
在您的UpdateInfo
方法中,您只使用具有IsDirty
== true的项目,执行更新,然后在完成后将其IsDirty
设置为false。