首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridView和INotifyCollectionChanged

DataGridView和INotifyCollectionChanged
EN

Stack Overflow用户
提问于 2014-02-05 07:46:29
回答 1查看 890关注 0票数 1

我心里想的是,如果我在自定义集合上实现INotifyCollectionChanged,DataGridView就会订阅CollectionChanged事件。

My实现了IListSource和INotifyCollectionChanged,并且有一个内部BindingList。我从ListChanged订阅BindingList事件并调用我的OnCollectionChanged方法,然后该方法引发CollectionChanged事件。

也许有更好的方法来完成以上的工作,我很高兴听到。但是,我目前最关心的是在调用这个排序方法之后让DataGridView更新:

代码语言:javascript
复制
    public void Sort(List<SortField> sortFields)
    {
        if(sortFields == null || sortFields.Count == 0) return;

        IOrderedEnumerable<T> res;

        if (sortFields[0].Ascending)
            res = _items.OrderBy(o => o[sortFields[0].Name]);
        else
            res = _items.OrderByDescending(o => o[sortFields[0].Name]);

        for (int x = 1; x < sortFields.Count; x++)
            if (sortFields[x].Ascending)
                res = res.ThenBy(o => o[sortFields[x].Name]);
            else
                res = res.ThenByDescending(o => o[sortFields[x].Name]);

        Items = new BindingList<T>(res.ToList());
        OnListChanged(this, new ListChangedEventArgs(ListChangedType.Reset, null));
    }

我是误以为DataGridView订阅了CollectionChanged事件,还是做错了其他事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-05 08:36:55

我假设您在自定义集合中使用ObservableCollection<T>类。DataGridView不知道INotifyCollectionChanged的事。它用于WPF绑定,而不用于WinForms

有关更多信息,请参见this

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21571437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档