/// <summary>
        /// The logic for use when the selected items of the <see cref="ModelSearcher" /> change.
        /// </summary>
        /// <param name="e">The EventArgs for the instance.</param>
        protected virtual void OnModelSearcherSelectedItemsChanged(NotifyCollectionChangedEventArgs e)
        {
            var firstTwoCount = ModelSearcher.SelectedItems.Take(2).Count();

            if (firstTwoCount == 2)
            {
                var currentItems  = ModelSearcher.CurrentItems.ToList();
                var selectedItems = ModelSearcher.SelectedItems.OrderBy(item => currentItems.IndexOf(item)).Select(item => item.Id);
                _backForwardNavigator.UpdateNavigationCollection(selectedItems);
                if (selectedItems.Contains(_backForwardNavigator.CurrentItem) == false)
                {
                    _backForwardNavigator.UpdateCurrentItem(selectedItems.First());
                }
            }
            else
            {
                _backForwardNavigator.UpdateNavigationCollection(ModelSearcher.CurrentItems.Select(item => item.Id));

                // Small quirk where if a bunch of items are selected, and then navigated through, re-selecting
                // the first item in that list does not trigger a refresh because technically, that first item
                // was the old selected item, and the new selected item. Refreshes are only triggered when the item changes.
                // This next piece of code remedies that.
                if (e.Action == NotifyCollectionChangedAction.Remove && firstTwoCount == 1)
                {
                    _backForwardNavigator.UpdateCurrentItem(ModelSearcher.SelectedItems[0].Id);
                }
            }
        }
        /// <summary>
        /// The logic used to swap the <see cref="Navigation" />.
        /// </summary>
        /// <param name="newValue">The new <see cref="Navigation" />.</param>
        /// <param name="oldValue">The old <see cref="Navigation" /></param>
        /// <returns>Task for async use.</returns>
        protected virtual async Task BackForwardNavigatorSwapped(IExtendedNavigator <int> newValue, IExtendedNavigator <int> oldValue)
        {
            if (oldValue != null)
            {
                await newValue.UpdateCurrentItem(oldValue.CurrentItem);

                oldValue.CurrentItemChangedCallback = null;
            }
            SetUpNewNavigator();
        }