コード例 #1
0
 /// <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;
     }
 }
コード例 #2
0
        /// <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));
            }
        }