所以基本上我在一个表单上有一个 ComboBox,我通过添加名为“Category”的自定义对象并将 DisplayMember 设置为我的对象的属性“Name”来填充它。
在另一个可以同时打开的表单上,我可以编辑这些“类别”对象的名称。我提出了一个事件“NameChanged”,但我怎样才能在包含 ComboBox 的表单上捕捉到它?
即使对象“类别”的属性“名称”发生变化,组合框上的显示也不会自动更新。所以我需要赶上这个事件,但我不知道该怎么做。
感谢任何可以帮助我的人。
如果使 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 更新显示。