2011-04-25 81 views
1

我有一个WPF数据网格与一个组合框和两个文本框列。在我的测试案例中,加载屏幕时,网格绑定到的集合中有两行。如果我更改任何单元格的内容,它会正确更新。但是,如果向网格添加新行,当更新组合框列中的值时,它不会在源集合中更新。尽管如此,文本框列对新添加的行仍然适用。该列被定义为这样的:WPF DataGrid ComboBoxColumn不插入值

<DataGrid.Columns> 
    <DataGridComboBoxColumn Header="Type" Width="*" SelectedValueBinding="{Binding Mode=TwoWay, Path=Type.Id}" 
     ItemsSource="{Binding Source={StaticResource PhoneTypeList}, Path=PhoneTypes}" 
     SelectedValuePath="Id" DisplayMemberPath="Type" /> 
    <DataGridTextColumn Binding="{Binding NotifyOnTargetUpdated=True, Path=Number, Mode=TwoWay, ValidatesOnExceptions=False}" Header="Number" Width="*"/> 
    <DataGridTextColumn Binding="{Binding NotifyOnSourceUpdated=True, Path=Extension, ValidatesOnExceptions=False}" Header="Extension" Width="*"/> 
</DataGrid.Columns> 

这里是我的视图模型的PHONENUMBERS属性:

public ObservableCollection<PhoneNumber> PhoneNumbers 
     { 
      get 
      { 
       return _phoneNumbers; 
      } 
      set 
      { 
       if (value != _phoneNumbers) 
       { 
        _phoneNumbers = value; 
        OnPropertyChanged("PhoneNumbers"); 
       } 
      } 
     } 

更新:这是我的******中国类:

public class PhoneNumber : INotifyPropertyChanged 
    { 
     private string _number; 
     private string _extension; 
     private PhoneType _type; 

     public PhoneType Type { get { return _type; } 
      set { _type = value; OnPropertyChanged("Type"); } } 
     public string Number 
     { 
      set 
      { 
       _number = value; 
       OnPropertyChanged("Number"); 
      } 
      get { return _number; } 
     } 

     public string Extension 
     { 
      set 
      { 
       _extension = value; 
       OnPropertyChanged("Extension"); 
      } 
      get { return _extension; } 
     } 

     public override string ToString() 
     { 
      return Number + (!string.IsNullOrEmpty(Extension) ? " x " + Extension : ""); 
     } 

     public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 
     private void OnPropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, 
        new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
+0

是什么你PhoneNumberType样子? – bendewey 2011-04-25 15:26:43

+0

更新,以显示电话号码类 – drowned 2011-04-25 15:39:15

回答

0

首先,检查你的输出窗口中显示任何绑定错误消息。

它看起来像我一样当你添加一个新项目时,Type属性可能为空。这基本上使得Type的Id属性不可访问。

尝试在你的******中国构造

PhoneNumber() 
{ 
    _type = new PhoneType(); 
} 

或者实例化一个新的默认类型的对象更好的是,您的组合框直接绑定到类型,而不是到嵌套Type.Id(改变的SelectedValue绑定和删除SelectedValuePath 。

<DataGridComboBoxColumn Header="Type" Width="*" SelectedValueBinding="{Binding Mode=TwoWay, Path=Type}" 
    ItemsSource="{Binding Source={StaticResource PhoneTypeList}, Path=PhoneTypes}" 
    DisplayMemberPath="Type" /> 
+0

我不能让这些结合的修饰工作,但添加的默认类型的对象似乎已经解决了这一问题。非常感谢。 – drowned 2011-04-25 16:20:33

+0

输出窗口中没有BindingExceptions – bendewey 2011-04-25 16:22:23

+0

不可以,不绑定感染 – drowned 2011-04-25 16:30:10