2012-02-14 28 views
2

我設置DataContext的ItemsSource綁定和不工作的PropertyChanged

this.DataContext = new MainWindowViewModel(); 

而且我綁定一個TabControlItemsSource,當我在MainWindowViewModel它工作構造器添加一個新的TabItem!但是,當我在事件(點擊)中添加新的TabItem時,不起作用。

我有這樣的特性:

List<Item> _listOfItem; 
public List<Item> ListOfItem 
{ 
    get 
    { 
     return _listOfItem; 

    } 
    set 
    { 
     _listOfItem = value; 
     PropertyChanged(this, new PropertyChangedEventArgs("ListOfItem")); 
    } 
} 

請幫助。

回答

2

如果您希望向UI通知收集更改,則應該使用ObservableCollection而不是List

ObservableCollection<Item> _listOfItem; 
public ObservableCollection<Item> ListOfItem 
{ 
    get 
    { 
     return _listOfItem; 
    } 
    set 
    { 
     _listOfItem = value; 
     PropertyChanged(this, new PropertyChangedEventArgs("ListOfItem")); 
    } 
} 

請注意,您只需要調用PropertyChanged事件爲您ListOfItem如果你的建築視圖模型型之後引用更改。如果它沒有改變,那麼一個簡單的自動屬性就可以滿足ListOfItem

+0

據我瞭解,您不需要在ObservableCollection上引發PropertyChanged。所以你可以擺脫財產,只留下「Public ObservableCollection _listOfItem;」。請注意,這隻適用於插入和刪除(更新=刪除,然後插入)。 – 2012-09-11 10:42:49

+1

不,您將需要調用PropertyChanged事件,如果對可觀察集合的引用更改以通知任何UI元素。這方面的任何其他房產類型都沒有什麼不同。 – devdigital 2012-09-11 12:11:25

+0

我的所有源代碼中沒有單一視圖,其中observablecollection的引用在視圖處於活動狀態時發生更改。我只將INotifyPropertyChanged添加到存儲在OC中的類以支持更新。所以我明白你爲什麼這樣做,但大多數時候你不需要財產。 – 2012-09-12 06:01:55

1

您需要使用UI和ObservableCollection才能看到對該集合的添加和刪除操作。它在構造函數中工作,因爲List是爲UI創建的。