2

私はいくつかの角度からこの問題を解決しようとしました。ここでは、小さなテスト ケースに単純化しようとしました。

プロパティのプロパティにバインドされている 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 に伝える方法はありますか?

アドバイスをありがとう。

4

1 に答える 1