gpt4 book ai didi

wpf - 暂停对绑定(bind) ObservableCollection 的 DataGrid 的更新

转载 作者:行者123 更新时间:2023-12-02 04:20:46 24 4
gpt4 key购买 nike

有没有办法暂停 ObservableCollectionNotifyCollectionChanged 事件?我的想法如下:

public class PausibleObservableCollection<Message> : ObservableCollection<Message>
{
public bool IsBindingPaused { get; set; }

protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (!IsBindingPaused)
base.OnCollectionChanged(e);
}
}

这确实暂停了通知,但显然当时遗漏(但仍然添加)的项目位于 NotifyCollectionChangedEventArgs 内,因此当我再次启用通知时不会传递到绑定(bind)的 DataGrid。

我是否必须想出一个集合的自定义实现才能控制这方面?

最佳答案

如果您不想丢失临时存储可能起作用的任何通知,则以下方法可能有效,但未经测试:

public class PausibleObservableCollection<T> : ObservableCollection<T>
{
private readonly Queue<NotifyCollectionChangedEventArgs> _notificationQueue
= new Queue<NotifyCollectionChangedEventArgs>();

private bool _isBindingPaused = false;
public bool IsBindingPaused
{
get { return _isBindingPaused; }
set
{
_isBindingPaused = value;
if (value == false)
{
while (_notificationQueue.Count > 0)
{
OnCollectionChanged(_notificationQueue.Dequeue());
}
}
}
}

protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
if (!IsBindingPaused)
base.OnCollectionChanged(e);
else
_notificationQueue.Enqueue(e);
}
}

这应该将集合暂停时发生的每个更改推送到队列中,然后在集合设置为恢复后将其清空。

关于wpf - 暂停对绑定(bind) ObservableCollection<T> 的 DataGrid 的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5490816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com