2009-10-17 115 views
1

我已經創建了WPF MVVM應用程序,並將WPFToolkit DataGrid綁定到DataTable,所以我想知道如何實現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)會觸發一個變更通知通過對信息查看你(該表將隨之更新)

第二種情況是,你需要你的T對象執行INotifyPropertyChanged ...

最終,你的代碼應該是這個樣子:

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); 
      } 
     } 
    } 

現在設置你的視圖的DataContext的是你的視圖模型的實例,並綁定到集合,如:

<tk:DataGrid 
    ItemsSource="{Binding Path=MyData}" 
    ... /> 

希望這有助於:) 伊恩

相關問題