如何绑定到子属性并仍然获取更新
本文关键字:属性 更新 获取 何绑定 绑定 | 更新日期: 2023-09-27 18:27:01
我有以下表格
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();
}
当I:
var parent = this.aDataGrid.SelectedItem as Parent;
parent.Name = anotherName;
DataGrid中的第一个单元格会立即更新。但当我:
var parent = this.aDataGrid.SelectedItem as Parent;
parent.Child = anotherChild;
它不会自动更新第二个单元格。
如何更正?我缺少什么?
是否需要在Child属性的setter中实现INotifyPropertyChanged和RaisePropertyChanged"Child"?这应该标记它需要更新的绑定-没有这个,绑定就不知道属性已经改变
如果你的父/子对象是EF生成的,那么你可能想在谷歌上搜索"EF和MVVM",了解如何将这些对象粘贴到你的UI视图中的一些想法,包括但不限于触发属性更改更新。
我可以强制DataGrid使用加载新值
var itemsSource = this.aDataGrid.ItemsSource as IEnumerable<Parent>;
this.aDataGrid.ItemsSource = itemsSource.ToList();
但这似乎不对。我刚刚发现也能做到这一点
this.aDataGrid.Items.Refresh();
但我仍然认为这一定是更好的方法