2012-02-14 4 views
2

작동하지 않는 나는 DataContext을 설정ItemsSource 바인딩하여 PropertyChanged

this.DataContext = new MainWindowViewModel(); 

을 그리고 나는 그것이 작동하고 MainWindowViewModel의 생성자에 새로운 TabItem를 추가 할 때 I는 TabControlItemsSource을 결합하고있다! 그러나 이벤트 (클릭)에 새로운 TabItem을 추가하면 아무 효과가 없습니다.

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

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

이 도와주세요 :

나는이 속성이 있습니다.

답변

2

UI에 컬렉션 변경 사항을 알리려면 List 대신 ObservableCollection을 사용해야합니다. 당신은 단지 ListOfItem 당신의 PropertyChanged 이벤트를 호출 할 필요가

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

참고하면 뷰의 모델 유형의 건설 후 기준 변경됩니다. 변경되지 않으면 간단한 자동 속성으로 ListOfItem 만 충분합니다.

+0

ObservableCollection에서 PropertyChanged를 발생시킬 필요가 없다는 것을 이해할 수 있습니다. 따라서 속성을 없애고 "ObservableCollection Public ObuchvableCollection _listOfItem;"만 남겨 둘 수 있습니다. 주의해라. 이것은 삽입과 삭제 (update = delete와 insert)에 대해서만 작동 할 것이다. –

+1

아니요, UI 요소를 알리기 위해 관찰 가능 컬렉션에 대한 참조가 변경되면 PropertyChanged 이벤트를 호출해야합니다. 그 점에서 다른 부동산 유형과 다르지 않습니다. – devdigital

+0

보기가 활성화되어있는 동안 observablecollection의 참조가 변경되는 모든 소스 코드에서 단일보기가 없습니다. 업데이트를 지원하기 위해 OC에 저장된 클래스에만 INotifyPropertyChanged를 추가합니다. 그래서 나는 당신이 이것을하는 이유를 이해하지만 대부분의 시간 동안 당신은 부동산을 필요로하지 않을 것입니다. –

1

을 구현하려면 컬렉션을 변경해야하며 List<T> 대신 ObservableCollection<T> (구현)을 사용할 수 있습니다.

1

UI에 ObservableCollection을 사용해야 컬렉션에 추가 및 삭제를 볼 수 있습니다. List가 UI 용으로 작성되면서 생성자에서 작동합니다.

관련 문제