2012-02-18 2 views
0

Вот историяПравильный метод обновления наблюдаемой коллекции?

// Это класс образец

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; 

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

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

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

Я получил индекс в коллекции с помощью поиска списка со значением «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.

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

ответ

1

INotifyPropertyChanges Реализовать в вашем типа «Car». Here is an example, как это сделать.

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

+0

INotifyPropertyChanges кажется совершенно другим методом для обновления интерфейса. Я добавил эффект анимации раскадровки в событии обновления коллекции. Используя мой второй метод, он безупречно применяет анимацию к измененной строке в интерфейсе ListView. Однако мне может понадобиться корректировка, если вы используете INotifyPropertyChanges – user995387

0

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

+0

Может быть, во втором методе я обновил коллекцию. – user995387

+1

Да, похоже, вы удаляете и вставляете. Вы не показываете код, в котором вы подключили функцию к коллекции. Недавно я опубликовал сообщение BLOG о наблюдаемых коллекциях, которые могут вам помочь: http://weblogs.asp.net/stevewellens/archive/2010/05/29/observable-collections.aspx –

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