2012-02-18 96 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; 

接下來我有一個按鈕,將更新名稱爲「本田」的集合項目。我想更新計數值+1。

這是我做了按鈕單擊事件:

第一種方法:

我在它與價值「本田」搜索列表中得到了集合中的索引。我更新的價值該索引是這樣的:

 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

實施的「Car」型INotifyPropertyChangesHere is an example如何做到這一點。

ObservableCollection訂閱此接口事件,因此當您的Car.count屬性引發PropertyChanged事件時,ObservableCollection可以看到它並可以通知UI,因此UI將刷新。

+0

INotifyPropertyChanges似乎用於更新的界面完全不同的方法。我在收集更新事件中添加了一些故事板動畫效果。 使用我的第二種方法,它完美地將動畫應用於ListView界面中已更改的行。但是,如果使用INotifyPropertyChanges – user995387 2012-02-18 06:01:38

0

你沒有更新的觀察集合。
您正在更新集合中的對象。

+0

,可能需要進行一些調整。可能是我更新了集合的第二種方法。 – user995387 2012-02-18 07:39:29

+1

是的,它看起來像你正在刪除和插入。您不會在代碼中將函數連接到集合的位置。前段時間,我做了一篇關於可觀察集合的博客文章,可能會幫助你:http://weblogs.asp.net/stevewellens/archive/2010/05/29/observable-collections.aspx – 2012-02-18 15:32:45