2012-03-06 33 views
1

我有以下表如何綁定到一個孩子的財產,仍然得到更新?

CREATE TABLE parent 
( 
    id   NUMBER(10, 0) NOT NULL, 
    name   VARCHAR2(15 CHAR) NOT NULL, 
    child_id  NUMBER(10, 0) NOT NULL, 
    primary key (id) 
); 

CREATE TABLE child 
( 
    id   NUMBER(10, 0) NOT NULL, 
    name   VARCHAR2(15 CHAR) NOT NULL, 
    primary key (id) 
); 

ALTER TABLE parent 
ADD constraint foreign key (child_id) references child; 

而下面的XAML

<DataGrid Name="aDataGrid"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=NAME}" /> 
     <DataGridTextColumn Binding="{Binding Path=CHILD.NAME}" /> 
    </DataGrid.Columns> 
</DataGrid> 

數據綁定這樣的:

using(var context = new Entities()) 
{ 
    this.aDataGrid.ItemsSource = context.Parent.ToList(); 
} 

當我:

var parent = this.aDataGrid.SelectedItem as Parent; 
parent.Name = anotherName; 

第一個單元格立即在DataGrid中更新。但是當我:

var parent = this.aDataGrid.SelectedItem as Parent; 
parent.Child = anotherChild; 

它不會自動更新第二個單元格。

如何解決此問題?我錯過了什麼?

+0

顯示您創建和綁定集合的位置。顯示父母和孩子的課程。 – Paparazzi 2012-03-06 20:16:43

+0

@BalamBalam我包含了所需的代碼 – 2012-03-06 21:02:22

+0

不,您沒有包含所需的代碼。顯示父母和孩子的課程。 – Paparazzi 2012-03-06 21:12:43

回答

1

你需要impliment INotifyPropertyChanged的和你的孩子setter方法RaisePropertyChanged「孩子」 ?這應該標記它需要更新的綁定 - 沒有綁定不知道propety已經改變。
如果你的父/子對象是EF生成的,那麼你可能想谷歌「EF和MVVM」的一些想法如何將這些對象粘貼到你的UI視圖 - 包括但不限於觸發屬性更改更新。

+0

不,整個解決方案中沒有'INotifyPropertyChanged',代碼是由EF4生成的,我可以改變它嗎? – 2012-03-07 16:04:17

+1

我不熟悉EF生成的代碼,但我的猜測是它生成一個花園所有.NET屬性,而不是WPF綁定的東西。您可以使用partial類將其添加到生成的代碼的頂部,但通常情況下,您的EF對象(您的EF對象(模型)和您的UI xaml(view)ala MVVM)之間會有一個ViewModel包裝器。通常它的INotifyPropertyChange實現了視圖模型。 – Ricibob 2012-03-07 16:40:45

0

我可能會迫使DataGrid中使用

var itemsSource = this.aDataGrid.ItemsSource as IEnumerable<Parent>; 
this.aDataGrid.ItemsSource = itemsSource.ToList(); 

加載新的值,但它似乎並不正確。 我剛剛發現,同樣可以用

this.aDataGrid.Items.Refresh(); 

來實現,但是我仍然認爲,必須有更好的方式

相關問題