如何绑定到子属性并仍然获取更新

本文关键字:属性 更新 获取 何绑定 绑定 | 更新日期: 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();

但我仍然认为这一定是更好的方法