/// <summary> /// The logic used whenever a dependent locator is swapped. /// </summary> /// <param name="newLocator">The new locator.</param> /// <param name="oldLocator">The old locator.</param> /// <param name="token">The token to use to lock.</param> protected void ProcessLocatorSwap(ILocator newLocator, ILocator oldLocator, object token) { if (oldLocator != null) { Locators.Remove(oldLocator); oldLocator.SearchToBegin -= Locator_SearchToBegin; oldLocator.SearchComplete -= Locator_SearchComplete; oldLocator.RecordRequested -= Locator_RecordRequested; } if (newLocator != null) { Locators.Add(newLocator); newLocator.RequestClear(); newLocator.RequestDisable(token); newLocator.SearchToBegin += Locator_SearchToBegin; newLocator.SearchComplete += Locator_SearchComplete; newLocator.RecordRequested += Locator_RecordRequested; } }
/// <summary> /// The logic used to update the <see cref="ModelSearcher" />. /// </summary> /// <param name="searcher">The new <see cref="ModelSearcher" />.</param> /// <returns>Task for async use.</returns> public async Task UpdateModelSearcher(IVMLocator <TModelSearcher> searcher) { var oldValue = _modelSearcher; if (Perform.ReplaceIfDifferent(ref _modelSearcher, searcher).WasSuccessful) { if (oldValue != null) { Locators.Remove(oldValue); oldValue.SelectedItems.CollectionChanged -= SelectedItems_CollectionChanged; oldValue.ExportId -= ModelSearcher_ExportId; oldValue.Cleared -= ModelSearcher_Cleared; } if (_modelSearcher != null) { _modelSearcher.SelectedItems.CollectionChanged += SelectedItems_CollectionChanged; _modelSearcher.ExportId += ModelSearcher_ExportId; _modelSearcher.Cleared += ModelSearcher_Cleared; Locators.Add(_modelSearcher); if (_modelSearcher.CurrentItems.Any()) { var navCollection = (_modelSearcher.SelectedItems.Take(2).Count() == 2 ? _modelSearcher.SelectedItems : _modelSearcher.CurrentItems ); _backForwardNavigator.UpdateNavigationCollection(navCollection.Select(item => item.Id)); int currentItem = (_modelSearcher.SelectedItems.Any() ? _modelSearcher.SelectedItems : _modelSearcher.CurrentItems ).First().Id; await _backForwardNavigator.UpdateCurrentItem(currentItem); } } await OnModelSearcherSwapped(oldValue); OnPropertyChanged(nameof(ModelSearcher)); } }