0

У меня есть DataGrid и я связывание наблюдаемой коллекции к немуНевозможно обновить элемент в WPF 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 не является vail

private void DgPersons_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
{ 
    DataGrid grid = (DataGrid)sender; 
    grid.CommitEdit(DataGridEditingUnit.Row, true); 
} 

Что я делаю неправильно. Когда я отлаживаю свое приложение, значения для возраста и зарплаты никогда не меняются, всегда такие же, как они начались изначально.

Спасибо за вашу помощь и время

+0

Можете ли вы предоставить XAML, а? Что делает «UpdatePerson'? – meilke

+0

Это было бы намного проще сделать, если бы вы следили за шаблоном [MVVM] (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx). –

+0

Это работает, если вы привязываете свойство вместо его настройки? – Rachel

ответ

0

Try используя BindingList вместо ObservableCollection агрегировать элементов изменения

Смежные вопросы