【问题标题】:How can I catch an event of an Object inside a ComboBox?如何在 ComboBox 中捕获对象的事件?
【发布时间】:2012-06-07 16:09:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: vb.net events combobox


    【解决方案1】:

    如果让 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 类来填充您的组合框。当属性值发生变化时,绑定会自动使用 INotifyPropertyChanged 更新显示。

    【讨论】:

    • 感谢您的回复。我现在正在尝试使用数据绑定重新编码我的组合框。
    • 我做不到。我必须使用 ComboBox.DataBindings.Add 方法吗?如果是,如何使用它,因为我尝试了很多方法,但我无法让它工作。我的数据源是一个继承 List(of Category) 的类。
    • 我在数据绑定方面的大部分经验都来自 WPF 和 Silverlight。一些开始使用 WinForms 和绑定的好地方是:stackoverflow.com/questions/29654/…stackoverflow.com/questions/454959/winforms-databinding
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多