c# – WPF ObservableCollection对BindingList

c# – WPF ObservableCollection对BindingList,第1张

概述在我的 WPF应用程序中,我有一个XamDataGrid.网格绑定到一个ObservableCollection.我需要允许用户通过网格插入新行,但事实证明,为了“添加新行”行可用,xamDataGrid的源需要实现IBindingList. ObservableCollection不实现该接口. 如果我将源更改为BindingList,它可以正常工作.然而,从阅读本主题可以理解的是,Bindin 在我的 WPF应用程序中,我有一个XamDataGrID.网格绑定到一个ObservableCollection.我需要允许用户通过网格插入新行,但事实证明,为了“添加新行”行可用,xamDataGrID的源需要实现IBindingList. ObservableCollection不实现该接口.

如果我将源更改为BindingList,它可以正常工作.然而,从阅读本主题可以理解的是,BindingList实际上是一个WinForms的东西,在WPF中并不完全支持.

如果我将所有可观察的选项更改为BindingLists,我会犯错误?有没有人有任何其他建议,如何可以为我的xamDataGrID添加新行功能,同时保持源作为ObservableCollection?我的理解是,有许多不同的网格需要实现IBindingList以支持添加新的行功能,但是我看到的大多数解决方案只是切换到BindingList.

谢谢.

解决方法 IBindingList界面和 BindingList类在System.ComponentModel命名空间中定义,所以不是严格的windows窗体相关的.

你检查过xamGrid是否支持绑定到ICollectionView源?如果是这样,您可以使用此界面公开数据源,并使用BindingListCollectionView备份.

您也可以创建一个ObservableCollection< T>的子类.并实现IBindingList接口:

using System;using System.ComponentModel;using System.Collections.Generic;using System.Collections.ObjectModel;public class ObservableBindingList<T> : ObservableCollection<T>,IBindingList{    //  Constructors    public ObservableBindingList() : base()    {    }    public ObservableBindingList(IEnumerable<T> collection) : base(collection)    {    }    public ObservableBindingList(List<T> List) : base(List)    {    }    //  IBindingList Implementation    public voID Addindex(PropertyDescriptor property)    {        throw new NotImplementedException();    }    public object AddNew()    {        throw new NotImplementedException();    }    public bool AllowEdit    {        get { throw new NotImplementedException(); }    }    public bool AllowNew    {        get { throw new NotImplementedException(); }    }    public bool AllowRemove    {        get { throw new NotImplementedException(); }    }    public voID ApplySort(PropertyDescriptor property,ListSortDirection direction)    {        throw new NotImplementedException();    }    public int Find(PropertyDescriptor property,object key)    {        throw new NotImplementedException();    }    public bool IsSorted    {        get { throw new NotImplementedException(); }    }    public event ListChangedEventHandler ListChanged;    public voID RemoveIndex(PropertyDescriptor property)    {        throw new NotImplementedException();    }    public voID RemoveSort()    {        throw new NotImplementedException();    }    public ListSortDirection SortDirection    {        get { throw new NotImplementedException(); }    }    public PropertyDescriptor SortProperty    {        get { throw new NotImplementedException(); }    }    public bool SupportsChangeNotification    {        get { throw new NotImplementedException(); }    }    public bool SupportsSearching    {        get { throw new NotImplementedException(); }    }    public bool SupportsSorting    {        get { throw new NotImplementedException(); }    }}

或者,您可以将BindingList< T>并实现INotifyCollectionChanged接口.

总结

以上是内存溢出为你收集整理的c# – WPF ObservableCollection对BindingList全部内容,希望文章能够帮你解决c# – WPF ObservableCollection对BindingList所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1258885.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存