2017年12月6日 星期三

ObservableCollection

Ref:

https://dotblogs.com.tw/wadehuang36/2010/11/03/observablecollection


System.Collections.ObjectModel.ObservableCollection不是什麼新鮮的東西,早在幾年前,就存在Silverlight與WPF中,它跟一般的Collection最大的不同地方在,它可以被監控,當集合有所變動,會產生事件,可以控制變化,如UI亓件需要監控集合,當變動時UI必需有所調整,或新增資料到集合中,要做一些初始化的動作等等。
NOTE:
在3.0中ObservableCollection建置在WindowsBase.dll中,不過我想沒人有寫個Web AP,為了一個類別而加入WPF的基本組件吧,不過在4.0中ObservableCollection已經被移到System.dll了,不管在什麼類型的專案都可以使用。

 

範例

public interface IModel : INotifyPropertyChanged
{
    string Key { get; set; }
    string Value { get; set; }
}

public class Sample
{
    public Sample()
    {
        ObservableCollection<IModel> collection = new ObservableCollection<IModel>();
        collection.CollectionChanged += OnCollectionChanged;
    }

    private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        //當新增物件到集合時,做一些初始化
        if (e.Action == NotifyCollectionChangedAction.Add)
        {
            foreach (IModel modle in e.NewItems)
            {
                modle.PropertyChanged += (x, y) =>
                {
                    //Do Something
                };
            }
        }
    }
}

NotifyCollectionChangedEventArgs說明

屬性
說明
Action
取得造成事件的動作。
NewItems
取得變更所涉及的新項目清單。
NewStartingIndex
取得發生變更的索引,預設值為-1,如collection.Insert(5,obj),NewStartingIndex值為是5。
OldItems
取得受 Replace、Remove 或 Move 動作影響的項目清單。
OldStartingIndex
取得發生 Move、Remove 或 Replace 動作的索引,預設值為-1,如collection.RemoveAt(5,obj),OldStartingIndex值為是5。

Action種類

成員名稱
說明
Add
集合中已加入一個或多個項目。
Remove
集合中已移除一個或多個項目。
Replace
集合中已取代一個或多個項目。
Move
集合中已移動一個或多個項目。
Reset
集合的內容已大幅變更。

參考資料

沒有留言:

張貼留言