2011-04-25 74 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