2009-10-17 2 views
1

WPF MVVM 응용 프로그램을 만들고 DataTable에 WPFToolkit DataGrid 바인딩을 설정하여 변경 내용을 알리는 DataTable 속성을 구현하는 방법을 알고 싶습니다. 현재 내 코드는 아래와 같습니다.InotifyPropertyChanged를 사용하여 DataTable 속성을 구현하는 방법

public DataTable Test 
{ 
    get { return this.testTable; } 
    set 
    { 
     ... 
     ... 
     base.OnPropertyChanged("Test"); 
    } 
} 

public void X() 
{ 
    this.Test.Add(...); // I suppose this line will call to getter first (this.Test = get Test) and then it will call add letter, this mean that setter scope will never fire. 
    base.OnPropertyChanged("Test"); // my solution is here :) but I hope it has better ways. 
} 

이 문제에 대한 다른 해결책이 있습니까?

답변

1

테이블 데이터가 변경 될 수있는 두 가지 방법이 있습니다. 컬렉션에서 요소를 추가/제거하거나 요소 내의 일부 속성이 변경 될 수 있습니다.

첫 번째 시나리오는 처리하기 쉽습니다. 컬렉션을 ObservableCollection<T>으로 만드십시오. 테이블에 .Add(T item) 또는 .Remove(item)를 호출하면 ... 당신을 위해보기를 통해 변경 알림을 발사합니다 (테이블 그에 따라 업데이트됩니다) 당신이에서 INotifyPropertyChanged를 구현하여 T 객체를 필요로하는 곳에 두 번째 시나리오는

같은 컬렉션에

public class MyViewModel 
    { 
     public ObservableCollection<MyObject> MyData { get; set; } 
    } 

    public class MyObject : INotifyPropertyChanged 
    { 
     public MyObject() 
     { 
     } 

     private string _status; 
     public string Status 
     { 
     get { return _status; } 
     set 
     { 
      if (_status != value) 
      { 
      _status = value; 
      RaisePropertyChanged("Status"); // Pass the name of the changed Property here 
      } 
     } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     private void RaisePropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = this.PropertyChanged; 
      if (handler != null) 
      { 
       var e = new PropertyChangedEventArgs(propertyName); 
       handler(this, e); 
      } 
     } 
    } 

지금 당신의 ViewModel의 인스턴스로보기의 데이터 컨텍스트를 설정하고, 바인딩, :

궁극적으로 당신의 코드는 다음과 같이한다

희망이 있습니다. Ian

관련 문제