diff --git a/src/ThunderDesign.Net-PCL.Threading/Collections/ObservableCollectionThreadSafe.cs b/src/ThunderDesign.Net-PCL.Threading/Collections/ObservableCollectionThreadSafe.cs index ae0bf80..442bfa3 100644 --- a/src/ThunderDesign.Net-PCL.Threading/Collections/ObservableCollectionThreadSafe.cs +++ b/src/ThunderDesign.Net-PCL.Threading/Collections/ObservableCollectionThreadSafe.cs @@ -96,6 +96,25 @@ public void Move(int oldIndex, int newIndex) } } + public void Reset() + { + var notifyAndWait = WaitOnNotifying; + + if (notifyAndWait) + _ReaderWriterLockSlim.EnterUpgradeableReadLock(); + try + { + OnPropertyChanged(nameof(Count)); + OnPropertyChanged(_IndexerName); + OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + } + finally + { + if (notifyAndWait) + _ReaderWriterLockSlim.ExitUpgradeableReadLock(); + } + } + public new void Add(T item) { var notifyAndWait = WaitOnNotifying; diff --git a/src/ThunderDesign.Net-PCL.Threading/Collections/ObservableDictionaryThreadSafe.cs b/src/ThunderDesign.Net-PCL.Threading/Collections/ObservableDictionaryThreadSafe.cs index 12a2375..e27c79c 100644 --- a/src/ThunderDesign.Net-PCL.Threading/Collections/ObservableDictionaryThreadSafe.cs +++ b/src/ThunderDesign.Net-PCL.Threading/Collections/ObservableDictionaryThreadSafe.cs @@ -169,6 +169,26 @@ public bool WaitOnNotifying return result; } + public void Reset() + { + var notifyAndWait = WaitOnNotifying; + + if (notifyAndWait) + _ReaderWriterLockSlim.EnterUpgradeableReadLock(); + try + { + OnPropertyChanged(nameof(Keys)); + OnPropertyChanged(nameof(Values)); + OnPropertyChanged(nameof(Count)); + OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + } + finally + { + if (notifyAndWait) + _ReaderWriterLockSlim.ExitUpgradeableReadLock(); + } + } + #if NET6_0_OR_GREATER public new bool TryAdd(TKey key, TValue value) { diff --git a/src/ThunderDesign.Net-PCL.Threading/Interfaces/IObservableCollectionThreadSafe.cs b/src/ThunderDesign.Net-PCL.Threading/Interfaces/IObservableCollectionThreadSafe.cs index 6540cd3..d730078 100644 --- a/src/ThunderDesign.Net-PCL.Threading/Interfaces/IObservableCollectionThreadSafe.cs +++ b/src/ThunderDesign.Net-PCL.Threading/Interfaces/IObservableCollectionThreadSafe.cs @@ -9,6 +9,7 @@ public interface IObservableCollectionThreadSafe : ICollectionThreadSafe, IBinda { #region methods void Move(int oldIndex, int newIndex); + void Reset(); #endregion } diff --git a/src/ThunderDesign.Net-PCL.Threading/Interfaces/IObservableDictionaryThreadSafe.cs b/src/ThunderDesign.Net-PCL.Threading/Interfaces/IObservableDictionaryThreadSafe.cs index 27891d8..ee1d7a7 100644 --- a/src/ThunderDesign.Net-PCL.Threading/Interfaces/IObservableDictionaryThreadSafe.cs +++ b/src/ThunderDesign.Net-PCL.Threading/Interfaces/IObservableDictionaryThreadSafe.cs @@ -5,6 +5,7 @@ namespace ThunderDesign.Net.Threading.Interfaces { public interface IObservableDictionaryThreadSafe : IDictionaryThreadSafe, IBindableCollection { + void Reset(); } public interface IObservableDictionaryThreadSafe : IDictionaryThreadSafe, IObservableDictionaryThreadSafe