0

所以基本上我在一个表单上有一个 ComboBox,我通过添加名为“Category”的自定义对象并将 DisplayMember 设置为我的对象的属性“Name”来填充它。

在另一个可以同时打开的表单上,我可以编辑这些“类别”对象的名称。我提出了一个事件“NameChanged”,但我怎样才能在包含 ComboBox 的表单上捕捉到它?

即使对象“类别”的属性“名称”发生变化,组合框上的显示也不会自动更新。所以我需要赶上这个事件,但我不知道该怎么做。

感谢任何可以帮助我的人。

4

1 回答 1

0

如果使 Category 类实现 INotifyPropertyChanged,则可以在属性更改时处理事件。

为此,您必须从一个简单的属性更改您的属性:

// will NOT raise event
public string Name { get; set; }

更像是:

// will raise event
public string Name
{
    get { return _Name; }
    set
    {
        if (_Name != value)
        {
            _Name = value;
            OnPropertyChanged("Name");
        }
    }
}
private string _Name;

然后在你的类中实现 INotifyPropertyChanged :

    public event EventHandler<PropertyChangedEventArgs> PropertyChanged;

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, e);
    }
    protected virtual void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

现在,将 Category 对象添加到 ComboBox 时,订阅 PropertyChanged 事件,该事件将在每次 Name 属性更改时引发。

更好的方法

考虑使用Binding类来填充您的 ComboBox。当属性值更改时,绑定会自动使用 INotifyPropertyChanged 更新显示。

于 2012-06-07T16:31:10.550 回答