更新ComboBox源不会更新ComboBox

时间:2019-07-09 15:45:11

标签: c# wpf data-binding

我有一个ComboBox,其ItemSource绑定到名为PersonsList的Person类型的ObservableCollection。此组合框上的DisplayMemberPath设置为FullName(仅返回名字+姓氏)

人员中存储着各种东西,例如名字,姓氏,电话号码,地址等。

现在,当我更新PersonsList中的一个人时,我将更新相应的数据字段并调用OnPropertyChanged(“ PersonsList”)。现在,当我返回查看该ComboBox时,就会发生我的问题。如果我已经更新了一个人的名字或姓氏,那么这里不会更新。但是,当我单击应该更新的人时,它将正确显示新更新的名字。

这里有2张图片来说明我的意思: https://imgur.com/a/fP6apoX

最后,这是我的XAML代码:

ComboBox ItemsSource="{Binding PersonsList, UpdateSourceTrigger=PropertyChanged}" 
DisplayMemberPath="FullName"/>

1 个答案:

答案 0 :(得分:0)

由于使用View映射的属性属于Person类,因此您需要按照下面的说明修改Person类,因此该属性更改事件需要由Person类触发

public class Person : INotifyPropertyChanged
{
    /// <summary>
    /// Property Changed Event Handler
    /// </summary>
    public event PropertyChangedEventHandler PropertyChanged;

    // Create the OnPropertyChanged method to raise the event
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }

    private String _FirstName;
    public String FirstName {
        get {
            return _FirstName;
        }
        set {
            _FirstName = value;
            OnPropertyChanged(nameof(FirstName));
        }
    }

    private String _LastName;
    public String LastName
    {
        get
        {
            return _LastName;
        }
        set
        {
            _LastName = value;
            OnPropertyChanged(nameof(LastName));
        }
    }

    private String _FullName;
    public String FullName
    {
        get
        {
            return _FullName;
        }
        set
        {
            _FullName = value;
            OnPropertyChanged(nameof(FullName));
        }
    }


}