gpt4 book ai didi

c# - WPF ObservableCollection 与 BindingList

转载 作者:可可西里 更新时间:2023-11-01 08:48:26 24 4
gpt4 key购买 nike

在我的 WPF 应用程序中,我有一个 XamDataGrid。网格绑定(bind)到 ObservableCollection。我需要允许用户通过网格插入新行,但事实证明,为了使“添加新行”行可用,xamDataGrid 的源需要实现 IBindingList。 ObservableCollection 不实现该接口(interface)。

如果我将源更改为 BindingList,它就可以正常工作。但是,据我阅读本主题的了解,BindingList 实际上是一个 WinForms 的东西,在 WPF 中没有得到完全支持。

如果我将所有 ObservableCollections 更改为 BindingLists 会不会出错?关于如何在将源保留为 ObservableCollection 的同时为我的 xamDataGrid 添加新行功能,有人有任何其他建议吗?据我了解,有许多不同的网格需要实现 IBindingList 以支持添加新行功能,但我看到的大多数解决方案只是切换到 BindingList。

谢谢。

最佳答案

IBindingList接口(interface)和BindingList类在 System.ComponentModel 命名空间中定义,因此与 Windows Forms 不严格相关。

你有没有检查过xamGrid支持绑定(bind)到 ICollectionView资源?如果是这样,您可以使用此接口(interface)公开您的数据源并使用 BindingListCollectionView 支持它。 .

您还可以创建 ObservableCollection<T> 的子类并实现 IBindingList 接口(interface):

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<T> 与 BindingList<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6254441/

24 4 0