如何绑定到子属性仍然得到更新?

时间:2012-03-06 17:53:38

标签: c# .net wpf binding entity-framework-4

我有以下表格

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;

它不会自动更新第二个单元格。

如何纠正?我缺少什么?

2 个答案:

答案 0 :(得分:1)

您是否需要在您的Child属性的setter中实现INotifyPropertyChanged和RaisePropertyChanged“Child”?这应该标记它需要更新的绑定 - 没有这个绑定不知道propety已经改变 如果您的父/子对象是EF生成的,那么您可能需要谷歌“EF和MVVM”来获取有关如何将这些对象粘贴到UI视图的一些想法 - 包括但不限于触发属性更改更新。

答案 1 :(得分:0)

我可以强制DataGrid使用

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

但这似乎不对。 我刚刚发现用

可以实现同样的目的
this.aDataGrid.Items.Refresh();

但我仍然认为这必须是更好的方式