Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法更新WPF datagrid中的项,值始终相同_C#_Wpf_Wpfdatagrid_Observablecollection_Inotifypropertychanged - Fatal编程技术网

C# 无法更新WPF datagrid中的项,值始终相同

C# 无法更新WPF datagrid中的项,值始终相同,c#,wpf,wpfdatagrid,observablecollection,inotifypropertychanged,C#,Wpf,Wpfdatagrid,Observablecollection,Inotifypropertychanged,我有一个datagrid,我正在将一个可观察的集合绑定到它 private void BindDG() { ObservableCollection<Person> personList = new ObservableCollection<Person>(PersonXml.GetPersonList()); dgPersons.ItemsSource = personList; } 更新方法如下:- public class Person : INo

我有一个datagrid,我正在将一个可观察的集合绑定到它

private void BindDG()
{
    ObservableCollection<Person> personList = new ObservableCollection<Person>(PersonXml.GetPersonList());
    dgPersons.ItemsSource = personList;
}
更新方法如下:-

public class Person : INotifyPropertyChanged
{
    public string name { get; set; }
    public string surname { get; set; }

    private int _age;
    public int age
    {
        get { return _age ; }
        set
        {
            if (value != _age)
            {
                _age = value;
                OnPropertyChanged("age");
            }
        }
    }

    private int _salary;
    public int salary
    {
        get { return _salary; }
        set
        {
            if (value != _salary)
            {
                _salary = value;
                OnPropertyChanged("salary");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }   
}
private void Update_Click(object sender, RoutedEventArgs e)
{
    var selPerson = (Person)dgPersons.SelectedItem;
    if (UpdatePerson(selPerson))
        BindDG();
}
我还实现了
CellEditEnding
事件处理程序,但没有成功

private void DgPersons_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    DataGrid grid = (DataGrid)sender;
    grid.CommitEdit(DataGridEditingUnit.Row, true);
}
我做错了什么。当我调试我的应用程序时,年龄和薪水的值永远不会改变,始终与最初启动时相同


感谢您的帮助和时间

尝试使用BindingList而不是ObservableCollection来聚合项目更改

您也可以提供XAML吗?
UpdatePerson
做什么?如果您遵循该模式,这将更容易做到。如果您绑定属性而不是设置属性,它是否有效?如果您使用内置事务功能,在WPF数据网格中编辑单元格效果最佳。试试看,效果更好。此外,可观察集合必须是公共属性@Gary如何编辑WPF数据网格中的单元格?