2012-02-14 31 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创建的。