2012-03-21 80 views
0

我需要在運行時進行綁定,因爲DataGrid將綁定到不同的數據源和/或類對象。我有兩個類CA和CB。在CB中,有一種設置綁定的方法。但下面的簡單方法只設置一種方式綁定。如何做雙向綁定? I.E.當List<CA>列表中的元素髮生更改時,DataGrid1將自動更新。WPF DataGrid雙向源代碼綁定到列表<DataClass>以編程方式

class CA 
{ 
    private int a = 1; 
    private string b = ""; 
    private bool c = true; 
    public int A { get { return a; } set { a = value; } } 
    public string B { get { return b; } set { b = value; } } 
    public bool C { get { return c; } set { c = value; } } 
} 

class CB 
{ 
    List<CA> datalist = new List<CA>(); 
    private void SetBinding(ref List<CA> ca, ref DataGrid dg) 
    { 
     dg.ItemsSource = ca; 
    } 
} 
+0

我認爲這也很重要,請注意你不應該通過ca或dg作爲參考,除非你有一些非常有說服力的理由這樣做(我無法想象) – 2012-05-18 07:35:08

回答

2

爲了正確綁定,您的類CA應該實現INotifyPropertyChanged接口。請參閱:http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx 並且所有屬性都應該引發propertyChanged事件以通知數據綁定控件。

在這裏你能找到簡單的例子:http://msdn.microsoft.com/en-us/library/ms229614.aspx

另外,我建議你使用的ObservableCollection而不是List與數據綁定,因爲它INotifyPropertyChanged的開箱,並通知元素的添加,刪除和修改的數據綁定控件。

+0

你擊敗了我,但只是爲了澄清,使用ObservableCollection仍然意味着OP需要在CA上實現INotifyPropertyChanged。 – 2012-03-21 19:15:42

+0

當然,隨機對象的各個屬性沒有跟蹤變化 – 2012-03-21 19:25:23

1

您的類「CA」需要實現INotifyPropertyChanged以更改要反映在數據網格中的CA對象。

如果您還希望datagrid知道正在添加和刪除的項目,那麼您將需要使用ObservableCollection而不是List或至少一個實現INotifyCollectionChanged的集合。