我有以下表格
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 :(得分: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();
但我仍然认为这必须是更好的方式