WPF datagrid下拉双向绑定

时间:2013-03-20 18:19:31

标签: wpf wpfdatagrid

我试图获取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>

我认为将组合框选定的值绑定到网格行有一些问题,但我已经绕圈试图将它连接起来。任何建议将不胜感激。

科里。

1 个答案:

答案 0 :(得分:1)

您错过了SelectedItemSelectedValue绑定:

<ComboBox ItemsSource="{Binding Path=DataContext.Persons, 
                       RelativeSource={RelativeSource AncestorType={x:Type uch:ControlBase}}}" 
                       DisplayMemberPath="Name" 
                   --> SelectedItem="{Binding ContactPerson}" <--
                       SelectedValuePath="Id" />