使用INotifyPropertyChanged

时间:2016-02-16 16:15:00

标签: c# wpf events datagrid inotifypropertychanged

我是C#的新手,我试图在我的数据网格中进行更改以触发我的主要方法。

我上课了:

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();
    }
}

我在这里遗漏了什么吗?当我在datagrid上更改某些内容时,items_CollectionChanged方法不会被触发。我有一种感觉,我没有正确地订阅这个活动。 OnPropertyChanged方法被正确触发,但之后没有任何反应。

非常感谢任何帮助。

谢谢,

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

1 个答案:

答案 0 :(得分:0)

据我了解,Collection Changed仅在创建集合时触发,或者在添加或删除时触发,但在集合内部更改时不会触发。

您想要完成的事情可以通过Datagrid本身的事件来完成,

e.g。通过使用DataGridView.CellValueChanged事件。

另一个解决方案是扩展ObservableCollection类。 看看这里:array-like collection