更正可观察集合的正确方法?

时间:2012-02-18 03:58:08

标签: c# .net c#-4.0 .net-4.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;

接下来,我有一个按钮,它将更新名为“Honda”的收藏品。我想将计数值更新+1。

以下是我在Button 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。

为我提供更新列表的最佳和正确的解决方案

2 个答案:

答案 0 :(得分:1)

在“Car”类型中实施INotifyPropertyChangesHere is an example如何做到这一点。

ObservableCollection订阅此接口事件,因此当您的Car.count属性引发PropertyChanged事件时,ObservableCollection可以看到它并且可以通知UI,因此UI将刷新。

答案 1 :(得分:0)

您没有更新Observable集合 您正在更新集合中的对象。