WPF DataGrid ComboBoxColumn未插入值

| 我有一个WPF数据网格,其中有一个组合框列和两个文本框列。在我的测试用例中,加载屏幕时,集合中有两行绑定了网格。如果我更改任何单元格的内容,它将正确更新。但是,如果将新行添加到网格,则当我更新组合框列中的值时,它不会在源集合中更新。文本框列对于新添加的行仍然可以正常工作。列的定义如下:
<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\");
                }
            }
        }
更新:这是我的PhoneNumber类:
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));
        }
    }
    
已邀请:
首先,检查输出窗口中是否有任何绑定错误消息。 在我看来,当您添加新项目时,Type属性可能为null。这实质上使Type的Id属性不可访问。 尝试在您的PhoneNumber构造函数中实例化一个新的默认Type对象
PhoneNumber() 
{
    _type = new PhoneType();
}
或者更好的方法是,将组合框直接绑定到类型,而不是嵌套的Type.Id(更改SelectedValue Binding并删除SelectedValuePath。
<DataGridComboBoxColumn Header=\"Type\" Width=\"*\" SelectedValueBinding=\"{Binding Mode=TwoWay, Path=Type}\"
   ItemsSource=\"{Binding Source={StaticResource PhoneTypeList}, Path=PhoneTypes}\"
   DisplayMemberPath=\"Type\" />
    

要回复问题请先登录注册