0

データグリッドがあり、監視可能なコレクションをそれにバインドしています

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);
}

私は何を間違っていますか。アプリケーションをデバッグすると、年齢と給与の値はまったく変化せず、最初に開始したときと常に同じです。

あなたの助けと時間をありがとう

4

1 に答える 1

0

ObservableCollection の代わりに BindingList を使用して、アイテムの変更を集約してみてください

于 2016-01-20T10:28:37.180 に答える