Правильный способ обновления наблюдаемой коллекции? - PullRequest
0 голосов
/ 18 февраля 2012

Вот история

// Это пример класса

Public class Car {
    public string name {get;set;}
    public int count {get;set;}
}

//The Observable collection of the above class.
ObservableCollection<Car> CarList = new ObservableCollection<Car>();

// I add an item to the collection.

CarList.Add(new Car() {name= "Toyota", count = 1});
CarList.Add(new Car() {name= "Kia", count = 1});
CarList.Add(new Car() {name= "Honda", count = 1});
CarList.Add(new Car() {name= "Nokia", count = 1});

Затем я добавил коллекцию выше в ListView.

ListView LView = new ListView();
ListView.ItemsSource = CarList;

Далее у меня естькнопка, которая обновит коллекционный элемент с именем «Honda».Я хочу обновить значение счетчика на + 1.

Вот что я сделал с событием нажатия кнопки:

Первый метод:

Я получил индекс в коллекциипутем поиска списка со значением «Honda» в нем.И я обновил значение этого индекса следующим образом:

     CarList[index].count = +1;

// This method does not creates any event hence will not update the ListView.
// To update ListView i had to do the following.
LView.ItemsSource= null;
Lview.ItemsSource = CarList;

Второй метод:

Я собрал значения во временном списке для текущего индекса.

index = // resulted index value with name "Honda".
string _name = CarList[index].name;
int _count = CarList[index].count + 1; // increase the count

// then removed the current index from the collection.
CarList.RemoveAt(index);

// created new List item here.
List<Car> temp = new List<Car>();

//added new value to the list.
temp.Add(new Car() {name = _name, count = _count});

// then I copied the first index of the above list to the collection.
CarList.Insert(index, temp[0]);

Второй метод обновил ListView.

Дайте мне лучшее и правильное решение для обновления списка

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Реализуйте INotifyPropertyChanges в своем типе "Автомобиль". Вот пример того, как это сделать.

ObservableCollection подписывается на это интерфейсное событие, поэтому, когда ваше свойство Car.count вызывает событие PropertyChanged, ObservableCollection может его увидеть и уведомить пользовательский интерфейс, поэтому пользовательский интерфейс будет обновлен.

0 голосов
/ 18 февраля 2012

Вы не обновляете коллекцию Observable.
Вы обновляете объект в коллекции.

...