Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace Core
- {
- using System;
- using System.Collections.ObjectModel;
- using System.Collections.Specialized;
- using System.ComponentModel;
- using System.Windows.Threading;
- /// <summary>
- /// This class is an Observable Collection which invokes automatically.
- /// This means that any change will be done in the right thread.
- /// </summary>
- /// <typeparam name="T">The type of the elements</typeparam>
- public class DispatcherObservableCollection<T> : ObservableCollection<T>
- {
- /// <summary>
- /// The default constructor of the ObservableCollection
- /// </summary>
- public DispatcherObservableCollection()
- {
- //Assign the current Dispatcher (owner of the collection)
- this.currentDispatcher = Dispatcher.CurrentDispatcher;
- }
- private readonly Dispatcher currentDispatcher;
- /// <summary>
- /// Executes this action in the right thread
- /// </summary>
- ///<param name="action">The action which should be executed</param>
- private void DoDispatchedAction(Action action)
- {
- if (this.currentDispatcher.CheckAccess())
- {
- action.Invoke();
- }
- else
- {
- this.currentDispatcher.Invoke(DispatcherPriority.DataBind, action);
- }
- }
- /// <summary>
- /// Clears all items
- /// </summary>
- protected override void ClearItems()
- {
- this.DoDispatchedAction(this.BaseClearItems);
- }
- private void BaseClearItems()
- {
- base.ClearItems();
- }
- /// <summary>
- /// Inserts a item at the specified index
- /// </summary>
- ///<param name="index">The index where the item should be inserted</param>
- ///<param name="item">The item which should be inserted</param>
- protected override void InsertItem(int index, T item)
- {
- this.DoDispatchedAction(() => this.BaseInsertItem(index, item));
- }
- private void BaseInsertItem(int index, T item)
- {
- base.InsertItem(index, item);
- }
- /// <summary>
- /// Moves an item from one index to another
- /// </summary>
- ///<param name="oldIndex">The index of the item which should be moved</param>
- ///<param name="newIndex">The index where the item should be moved</param>
- protected override void MoveItem(int oldIndex, int newIndex)
- {
- this.DoDispatchedAction(() => this.BaseMoveItem(oldIndex, newIndex));
- }
- private void BaseMoveItem(int oldIndex, int newIndex)
- {
- base.MoveItem(oldIndex, newIndex);
- }
- /// <summary>
- /// Removes the item at the specified index
- /// </summary>
- ///<param name="index">The index of the item which should be removed</param>
- protected override void RemoveItem(int index)
- {
- this.DoDispatchedAction(() => this.BaseRemoveItem(index));
- }
- private void BaseRemoveItem(int index)
- {
- base.RemoveItem(index);
- }
- /// <summary>
- /// Sets the item at the specified index
- /// </summary>
- ///<param name="index">The index which should be set</param>
- ///<param name="item">The new item</param>
- protected override void SetItem(int index, T item)
- {
- this.DoDispatchedAction(() => this.BaseSetItem(index, item));
- }
- private void BaseSetItem(int index, T item)
- {
- base.SetItem(index, item);
- }
- /// <summary>
- /// Fires the CollectionChanged Event
- /// </summary>
- ///<param name="args">The additional arguments of the event</param>
- protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs args)
- {
- this.DoDispatchedAction(() => this.BaseOnCollectionChanged(args));
- }
- private void BaseOnCollectionChanged(NotifyCollectionChangedEventArgs e)
- {
- base.OnCollectionChanged(e);
- }
- /// <summary>
- /// Fires the PropertyChanged Event
- /// </summary>
- ///<param name="args">The additional arguments of the event</param>
- protected override void OnPropertyChanged(PropertyChangedEventArgs args)
- {
- this.DoDispatchedAction(() => this.BaseOnPropertyChanged(args));
- }
- private void BaseOnPropertyChanged(PropertyChangedEventArgs args)
- {
- base.OnPropertyChanged(args);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement