2009-11-25 7 views
1

WPF Toolkit DataGrid은 내 뷰 모델에서 ObservableCollectionCar입니다. Car에는 PropertyChanged 이벤트가 있고 두 개의 문자열 속성 각각의 설정자가 이벤트를 시작합니다. 또한 SelectedItem라고도하는 Car 유형의보기 모델에서 속성에 바인딩 된 SelectedItem 모눈의 속성이 있습니다.업데이트 할 DataGrid를 가져올 수 없습니다.

그리드와 동일한 창에서 add, modifydelete에 대한 버튼이 있습니다. Addmodify은 각각 Car 속성에 대해 하나씩 두 개의 텍스트 상자가있는 대화 상자 창을 엽니 다. Delete은 확인 대화 상자를 표시 한 다음 삭제를 수행합니다.

adddelete의 경우 ObservableCollection에서 항목을 추가 또는 삭제하고 예상대로 그리드를 업데이트합니다. 그러나 modify의 경우 그렇지 않습니다. 처음에 내 CarPropertyChanged을 사용하지 않았고 일부 검색 후에 개별 항목의 속성이 변경되면 그리드가 업데이트되어야 함을 발견했습니다. 그러나 이제 PropertyChanged을 사용하고 있는데, 그리드는 여전히 업데이트되지 않습니다.

내보기 모델에서 SelectedItem 값을 변경하고 컬렉션의 항목을 직접 변경해 보았습니다.

내가 뭘 잘못하고 있니?

+0

몇 가지 코드를 제공해 주시겠습니까? – viky

답변

1

PropertyChanged 이벤트를 발생시키는 것뿐만 아니라 INotifyPropertyChanged를 구현하는지 확인하십시오. 또한 PropertyChanged를 올리면 "this"를 보낸 사람으로 전달해야합니다. 그렇지 않으면 WPF에서 이벤트를 무시합니다.

다음은 INotifyPropertyChanged를 구현하는 간단한 기본 클래스입니다.

public class Person : INotifyPropertyChanged { 

    private string name; 

    public string Name { 
     get { return name; } 
     set { 
      if (name != value) { 
       name = value; 
       OnPropertyChanged("Name"); 
      } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) { 
     var handler = PropertyChanged; 
     if (handler != null) { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

} 
+0

Josh - 이벤트를 제기했지만 인터페이스를 구현하지 않았습니다. Duh :) –

0

ObservableCollection의 고전적인 문제와 비슷합니다. ObservableCollection은 자신의 추가, 삭제 등을 통지합니다. 그것은 당신이 그것에 저장 한 것의 속성에 대한 변경을 알리지 않을 것입니다. 이것이 추가/삭제 작업이 예상대로 작동하는 이유입니다. 이 방법을 사용

ObservableCollection<MyObject> myCollection = new ObservableCollection<MyObject>();  
ICollectionView view = CollectionViewSource.GetDefaultView(myCollection); 

또한 benifit 그룹을 가지고 있으며, 뷰에 내장 된 정렬이 :

은 당신이해야 할 것은 CollectionView를 사용하고 그 결합이다.

관련 문제