WFP DataGrid ItemsSource привязка к ObservableCollection не обновляется после первой настройки? - PullRequest
1 голос
/ 29 сентября 2010

Я связываю приложение DataGrid из WPF с коллекцией ObservableCollection через DataGrid «ItemSource».Первоначально DataGrid предлагает заголовки и значения, однако обновления, внесенные в ObservableCollection, не отражаются?(т. е. когда я возвращаюсь программно и увеличиваю значение «Total»), я использую коллекцию ObservableCollection ниже.

Любые идеи, почему и как заставить сетку динамически обновлять / связывать правильно?*

РЕДАКТИРОВАТЬ - Или, возможно, дополнительный вопрос заключается в том, является ли в этом случае DataGrid тем элементом управления, который мне следует использовать для визуализации фактически таблицы в памяти?То есть observableCollection объекта SummaryItem фактически является таблицей в памяти.

Ответы [ 3 ]

7 голосов
/ 29 сентября 2010

Если я правильно понял, вы используете ObservableCollection. Если вы добавляете элементы в ObservableCollection, эти изменения всегда должны отражаться WPF, но если вы редактируете свойства элемента (т. Е. Изменяете значение "Total" для SummaryItem), это не изменение ObservableCollection, а SummaryItem.

Для достижения желаемого поведения ваши SummaryItems должны реализовать интерфейс INotifyPropertyChanged, чтобы «уведомлять» WPF при изменении свойств:

// implement the interface
public event PropertyChangedEventHandler PropertyChanged;

// use this for every property
private long _Total;
public long Total {
    get {
        return _Total;
    }
    set {
        _Total = value;
        if(PropertyChanged != null) {
            // notifies wpf about the property change
            PropertyChanged(this, new PropertyChangedEventArgs("Total"));
        }
    }
}
1 голос
/ 29 сентября 2010

вы только что столкнулись с классической проблемой с ObservableCollection. Только события добавления элемента и удаления элемента запускаются для OC. Это означает, что если элемент изменяется, вы НЕ получаете событие «ItemChanged».

0 голосов
/ 04 сентября 2011

ObservableCollection вызывает событие, только когда вы добавляете или удаляете элементы, если вам нужно вызвать событие, даже если какой-либо элемент в коллекции изменяется, используя BindingList.

...