我试图从几个角度解决这个问题。在这里,我尝试将其简化为一个小测试用例。
我在获取要更新绑定到属性的属性的 DataGrid 单元格时遇到问题。该属性由另一列中的绑定 ComboBox 单元格设置。绑定对象如下,我指的是属性:
public class MainObject : INotifyPropertyChanged
{
private int _subObjectId;
public virtual SubObject SubObjectObj { get; set; }
public int SubObjectId {
get { return _subObjectId; }
set { _subObjectId = value; SubObjectObj = <GetObjFromDB> };
}
...
}
public class SubObject : INotifyPropertyChanged
{
public int Id { get; set; }
public string Name { get; set; }
public string Specialty{ get; set; }
...
}
DataGrid ItemsSource 是
public ObservableCollection<MainObject> SourceData;
现在,DataGrid 中的列是子对象选项的组合框。它旁边的 TextBox 列(假定)显示在 ComboBox 中选择的任何 SubObject 的 SubObject.Specialty。
<DataGridTemplateColumn Header="SubObjects">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding SubObject.Name, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="ComboBoxSubObject" ItemsSource="{Binding Model.SubObjects, RelativeSource={RelativeSource AncestorType={x:Type uch:TestControl}}}"
DisplayMemberPath="Name"
SelectedValuePath="Id"
SelectedValue="{Binding SubObjectId, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="ComboBoxDoctor_OnSelectionChanged"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Specialty" Binding="{Binding Path=SubObjectObj.Specialty}"/>
最初绘制网格时,Specialty 列是正确的 - 它的属性是 SubObject 在另一列中显示的内容。但是当我更改 ComboBox 时,Specialty 列并没有改变。无论如何要告诉 DataGrid Specialty 列绑定源已更改并刷新?
感谢您的任何建议。