使用 INotifyPropertyChanged 在 C# 中触发事件

本文关键字:事件 INotifyPropertyChanged 使用 | 更新日期: 2023-09-27 18:34:46

我是 C# 的新手,我正在尝试更改我的数据网格以触发我的 main 方法。

我有我的班级:

public class siteMatch : INotifyPropertyChanged
{
    public string SelectedTag
    {
        get { return _SelectedTag; }
        set
        {
            if (value != _SelectedTag)
            {
                _SelectedTag = value;
                OnPropertyChanged(_SelectedTag);
            }
        }
    }
    private string _SelectedTag;
    protected void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, e);
    }
    protected void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }
}

我的主要课程中有这个:

public partial class MainWindow : Window
{
    public ObservableCollection<siteMatch> sitesMatched = new ObservableCollection<siteMatch>();
    public MainWindow()
    {
        InitializeComponent();
        sitesMatched.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(items_CollectionChanged);
    }
    static void items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        foreach (INotifyPropertyChanged item in e.OldItems)
            item.PropertyChanged -= new PropertyChangedEventHandler(item_PropertyChanged);
        foreach (INotifyPropertyChanged item in e.NewItems)
            item.PropertyChanged += new PropertyChangedEventHandler(item_PropertyChanged);
    }
    static void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        //throw new NotImplementedException();
    }
}

我在这里错过了什么吗?当我更改数据网格上的某些内容时,不会触发 items_CollectionChanged 方法。我有一种感觉,我没有正确订阅该活动。OnPropertyChanged 方法被正确触发,但之后没有任何反应。

任何帮助将不胜感激。

谢谢

编辑:我应该指出,我只能访问.Net 4

使用 INotifyPropertyChanged 在 C# 中触发事件

据我了解,集合更改仅在创建集合或添加或删除时触发,而不是在更改集合中的某些内容时触发。

你想要完成的事情可以用数据网格本身上的事件来完成,

例如,通过使用 DataGridView.CellValueChanged 事件。

另一种解决方案是扩展 ObservableCollection 类。看看这里 : https://stackoverflow.com/a/5256827/3042778