Rac*_*hel 26 c# wpf observablecollection inotifycollectionchanged
我有一个继承自的类,ObservableCollection
并添加了一些其他方法,如AddRange
和RemoveRange
我的基本方法调用是这样的:
public void AddRange(IEnumerable<T> collection)
{
foreach (var i in collection) Items.Add(i);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我想要访问e.NewItems
或者e.OldItems
在CollectionChanged
事件中对集合中的任何项目执行操作,并且NotifyCollectionChangedAction.Reset
操作不会传递这些值
void Instances_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null) // e.NewItems is always null
{
foreach (var item in e.NewItems)
{
if (item is EventInstanceModel)
((EventInstanceModel)item).ParentEvent = this;
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我认为我可以使用NotifyCollectionChangedAction.Add
而不是Reset
,但是会引发Range actions are not supported
异常
public void AddRange(IEnumerable<T> collection)
{
var addedItems = collection.ToList();
foreach (var i in addedItems) Items.Add(i);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, addedItems));
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,我如何提出一个CollectionChanged事件,并将新的或旧的项目列表传递给它?
Rac*_*hel 17
我一直在调查它,显然这个CollectionChanged
方法不能用多个项目引发.
所以我可以打电话
OnCollectionChanged(new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, singleItem));
Run Code Online (Sandbox Code Playgroud)
但我不能打电话
OnCollectionChanged(new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, listOfItems));
Run Code Online (Sandbox Code Playgroud)
现在我所做的只是为添加的每个项目添加Add事件,但我仍然对此感到不满,因为这意味着我CollectionChanged
为AddRange
方法中的每个项目而不是仅提升一次事件.
public void AddRange(IEnumerable<T> collection)
{
foreach (var i in collection)
{
Items.Add(i);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, i));
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说很好"独立".意思是我没有使用ObservableCollection
数据绑定.所以这不是一个ObservableCollection
问题,而是一个ListCollectionView
限制.
请阅读以下文章,这是一个非常有趣的读物:
归档时间: |
|
查看次数: |
35700 次 |
最近记录: |