1

適切にバインドするために、WPF データグリッド (ControlBase と呼ばれる基本クラスから派生したユーザー コントロールでホストされている) のドロップダウン列を取得しようとしています。最初はオブジェクトから正常に入力され、セルを編集すると入力されたドロップダウンが表示されますが、フォーカスを離れると選択した値がセルに戻りません。

これが私のモデルとドメイン オブジェクトです。

 public class ModelBase : INotifyPropertyChanged
 {
   public IList<Person> Persons { get; set; }
 }

 public class UserControlModel : ModelBase
 {
    public ObservableCollection<DatagridRecord> SourceData { get; set; }
 }

 public class Person
 {
   public int Id { get; set; }
   public string Name { get; set; }
 }

 public class DatagridRecord
 {
   public string Name { get; set; }
   public Person ContactPerson { get; set; }
 }

私の xaml.cs では、Model プロパティを介して DataContext を設定します。

 public UserControlModel _model;
 public UserControlModel Model
 {
  set
  {
    _model = value;
    DataContext = null;
    DataContext = _model;
  }
}

xaml での DataGrid 列の定義は次のとおりです。

<DataGridTemplateColumn Header="Person" >
     <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
        <TextBlock Text="{Binding Path=ContactPerson.Name}"/></DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
      <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
          <ComboBox ItemsSource="{Binding Path=DataContext.Persons, 
                       RelativeSource={RelativeSource AncestorType={x:Type uch:ControlBase}}}" 
                       DisplayMemberPath="Name" 
                       SelectedValuePath="Id" />
        </DataTemplate>
   </DataGridTemplateColumn.CellEditingTemplate>
 </DataGridTemplateColumn>

コンボボックスで選択した値をグリッド行に結び付けることに何か問題があると思いますが、それを接続しようとしてぐるぐる回りました。アドバイスをいただければ幸いです。

コーリー。

4

1 に答える 1

1

SelectedItemまたはSelectedValueバインディングがありません:

<ComboBox ItemsSource="{Binding Path=DataContext.Persons, 
                       RelativeSource={RelativeSource AncestorType={x:Type uch:ControlBase}}}" 
                       DisplayMemberPath="Name" 
                   --> SelectedItem="{Binding ContactPerson}" <--
                       SelectedValuePath="Id" />
于 2013-03-20T18:22:39.170 に答える