如何知道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#的泛型列表中

请让我知道如何解决这个问题。

如何知道c#中泛型列表的UI端更新了哪些值

我见过在模型(基)类中包含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。