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

您缺少一个SelectedItemSelectedValue绑定:

<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 回答