ObservableCollection – Extension Methods
When you ever used the CollectionView of the ObservableCollection and wanted to get or set the CurrentItem you might have noticed that it requires much more typing than expected.
For that purpose I created the following extension methods for the ObservableCollection.
public static class CollectionExtensions { /// <summary> /// This method returns the current item of the given collection. /// </summary> /// <typeparam name="T">The type of the elements in the collection.</typeparam> /// <param name="source">The collection.</param> public static T GetCurrentItem<T>(this IEnumerable<T> source) { if (source == null) return default(T); var collectionView = CollectionViewSource.GetDefaultView(source); return (T)collectionView.CurrentItem; } /// <summary> /// This method returns the current position within the given collection. /// </summary> /// <typeparam name="T">The type of the elements in the collection.</typeparam> /// <param name="source">The collection.</param> public static int GetCurrentPosition<T>(this IEnumerable<T> source) { if (source == null) return -1; var collectionView = CollectionViewSource.GetDefaultView(source); return collectionView.CurrentPosition; } /// <summary> /// This method sets the current item of the given collection. /// </summary> /// <typeparam name="T">The type of the elements in the collection.</typeparam> /// <param name="source">The collection.</param> /// <param name="item">The item which should be set as the current one.</param> public static void SetCurrentItem<T>(this IEnumerable<T> source, T item) { if (source == null) return; var collectionView = CollectionViewSource.GetDefaultView(source); collectionView.MoveCurrentTo(item); } /// <summary> /// This method moves the current item to the first. /// </summary> /// <typeparam name="T">The type of the elements in the collection.</typeparam> /// <param name="source">The collection.</param> public static void MoveCurrentToFirst<T>(this IEnumerable<T> source) { if (source == null) return; var collectionView = CollectionViewSource.GetDefaultView(source); collectionView.MoveCurrentToFirst(); } /// <summary> /// This method moves the current item to the previous. /// </summary> /// <typeparam name="T">The type of the elements in the collection.</typeparam> /// <param name="source">The collection.</param> public static void MoveCurrentToPrevious<T>(this IEnumerable<T> source) { if (source == null) return; var collectionView = CollectionViewSource.GetDefaultView(source); collectionView.MoveCurrentToPrevious(); } /// <summary> /// This method moves the current item to the next. /// </summary> /// <typeparam name="T">The type of the elements in the collection.</typeparam> /// <param name="source">The collection.</param> public static void MoveCurrentToNext<T>(this IEnumerable<T> source) { if (source == null) return; var collectionView = CollectionViewSource.GetDefaultView(source); collectionView.MoveCurrentToNext(); } /// <summary> /// This method moves the current item to the last. /// </summary> /// <typeparam name="T">The type of the elements in the collection.</typeparam> /// <param name="source">The collection.</param> public static void MoveCurrentToLast<T>(this IEnumerable<T> source) { if (source == null) return; var collectionView = CollectionViewSource.GetDefaultView(source); collectionView.MoveCurrentToLast(); } /// <summary> /// This method sets the current position withing the given collection /// </summary> /// <typeparam name="T">The type of the elements in the collection</typeparam> /// <param name="source">The collection</param> /// <param name="index">The new position</param> public static void SetCurrentPosition<T>(this IEnumerable<T> source, int index) { if (source == null) return; var collectionView = CollectionViewSource.GetDefaultView(source); collectionView.MoveCurrentToPosition(index); } /// <summary> /// Removes the items from the collection according to the predicate. /// </summary> /// <param name="source">The source.</param> /// <param name="predicate">The predicate.</param> public static void Remove<T>(this ICollection<T> source, Func<T, bool> predicate) { if (source == null) return; var itemsToRemove = source.Where(predicate).ToList(); foreach (var item in itemsToRemove) source.Remove(item); } }