.net中ObservableCollection有什么用?
当前回答
它是一个集合,用于通知大多数UI在集合中发生变化,它支持自动通知。
主要用于WPF,
假设你有一个带有列表框和add按钮的UI,当你点击按钮时,一个类型为suppose person的对象会被添加到observable集合中,你将这个集合绑定到Listbox的ItemSource,所以只要你在集合中添加了一个新项目,Listbox就会更新自己并在其中添加一个项目。
其他回答
class FooObservableCollection : ObservableCollection<Foo>
{
protected override void InsertItem(int index, Foo item)
{
base.Add(index, Foo);
if (this.CollectionChanged != null)
this.CollectionChanged(this, new NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Add, item, index);
}
}
var collection = new FooObservableCollection();
collection.CollectionChanged += CollectionChanged;
collection.Add(new Foo());
void CollectionChanged (object sender, NotifyCollectionChangedEventArgs e)
{
Foo newItem = e.NewItems.OfType<Foo>().First();
}
ObservableCollection是一个集合,它允许集合外部的代码知道何时发生了对集合的更改(添加、移动、删除)。它在WPF和Silverlight中被大量使用,但它的使用并不局限于这两个领域。代码可以添加事件处理程序,以查看集合何时发生更改,然后通过事件处理程序作出反应,执行一些额外的处理。这可能是更改UI或执行一些其他操作。
下面的代码实际上并没有做任何事情,只是演示了如何在类中附加处理程序,然后使用事件参数以某种方式对更改做出反应。WPF已经内置了许多操作,比如刷新UI,所以在使用observablecollection时可以免费获得这些操作
class Handler
{
private ObservableCollection<string> collection;
public Handler()
{
collection = new ObservableCollection<string>();
collection.CollectionChanged += HandleChange;
}
private void HandleChange(object sender, NotifyCollectionChangedEventArgs e)
{
foreach (var x in e.NewItems)
{
// do something
}
foreach (var y in e.OldItems)
{
//do something
}
if (e.Action == NotifyCollectionChangedAction.Move)
{
//do something
}
}
}
它是一个集合,用于通知大多数UI在集合中发生变化,它支持自动通知。
主要用于WPF,
假设你有一个带有列表框和add按钮的UI,当你点击按钮时,一个类型为suppose person的对象会被添加到observable集合中,你将这个集合绑定到Listbox的ItemSource,所以只要你在集合中添加了一个新项目,Listbox就会更新自己并在其中添加一个项目。
ObservableCollection警告
上面提到的(Said Roohullah Allem)
ObservableCollection类的独特之处在于 类支持名为CollectionChanged的事件。
记住这一点……如果你在ObservableCollection中添加了大量的项目,UI也会更新很多次。这可能会阻塞或冻结你的UI。 一种解决方法是创建一个新列表,添加所有的项目,然后将属性设置为新列表。这只会触及UI一次。再次……这是为了添加大量的项目。
ObservableCollection本质上与常规集合类似,只是它实现了 的接口:
INotifyCollectionChanged, INotifyPropertyChanged
因此,当您想知道集合何时发生更改时,它非常有用。触发一个事件,告诉用户添加/删除或移动了哪些条目。
更重要的是,当在表单上使用数据绑定时,它们非常有用。
推荐文章
- HTTP POST返回错误:417“期望失败。”
- 如何在。net中创建和使用资源
- 为什么Path。以Path.DirectorySeparatorChar开头的文件名合并不正确?
- 如何在c#中获得正确的时间戳
- Linq选择列表中存在的对象(A,B,C)
- c# .NET中的App.config是什么?如何使用它?
- c#:如何获得一个字符串的第一个字符?
- String类中的什么方法只返回前N个字符?
- 我如何提高ASP。NET MVC应用程序性能?
- 更好的方法将对象转换为int类型
- 我可以将c#字符串值转换为转义字符串文字吗?
- 在c#中转换char到int
- c#中朋友的对等物是什么?
- 关键字使用virtual+override vs. new
- 无法解析类型为“Microsoft.AspNetCore.Http.IHttpContextAccessor”的服务