私はいくつかの角度からこの問題を解決しようとしました。ここでは、小さなテスト ケースに単純化しようとしました。
プロパティのプロパティにバインドされている 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 の列はサブオブジェクトの選択肢の ComboBox です。ComboBox で選択されている SubObject の SubObject.Specialty を表示する (想定されている) その横の TextBox 列。
<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 列は正しいです。これは、サブオブジェクトが他の列に表示されるプロパティです。しかし、ComboBox を変更しても、Specialty 列は変更されません。Specialty 列バインディング ソースが変更され、更新されたことを DataGrid に伝える方法はありますか?
アドバイスをありがとう。