/// <summary> /// Sets the object display control. /// </summary> /// <param name="objectDisplayType">Display type of the object.</param> /// <param name="removeUntilAfterContext">The context to remove until.</param> private void SetObjectDisplayControl(string objectDisplayType, object removeUntilAfterContext = null) { //Reverse order of the currentContextItems in case removeUntilAfterContext !=null //Also copies it to an IEnumerable to prevent collection changed error in the following foreach loop var currentContextItemsInReverse = this.CurrentContext.Reverse<object>(); bool breakAfter = false; foreach (var context in currentContextItemsInReverse) { if (removeUntilAfterContext != null && context == removeUntilAfterContext) breakAfter = true; MessageBus.Current.SendMessage(new RemoveContextMessage(context)); if (breakAfter) break; } if (objectDisplayType == null) return; var objectDisplay = ObjectTypeDisplayControls.FirstOrDefault( objectDisplayControl => objectDisplayControl.ObjectTypeToDisplay == objectDisplayType); CurrentlySelectedContextProvider = objectDisplay.ContextProvider; MessageBus.Current.SendMessage(new MoveToDetailsViewMessage(CurrentlySelectedContextProvider.ObjectTypeProvided, MoveStrategy.MoveBackwards)); }
public InfiniteAccordionView() { InitializeComponent(); ObjectTypeDisplayControls = new ObservableCollection<IObjectTypeDisplay>(); ContextBorderControls = new ObservableCollection<ContextBorder>(); CurrentContext = new List<object>(); MessageBus.Current.Listen<RemoveContextMessage>().SubscribeOnDispatcher().Subscribe(message => { this.CurrentContext.Remove(message.Context); SetupUI(); }); MessageBus.Current.Listen<MoveToDetailsViewMessage>().SubscribeOnDispatcher().Subscribe(OnMoveToDetailsViewMessage); CurrentlySelectedContextProvider = null; this.Loaded += InfiniteAccordionViewLoaded; }
/// <summary> /// Moves to details view helper. /// </summary> /// <param name="message">The message.</param> private void MoveToDetailsViewHelper(MoveToDetailsViewMessage message) { switch (message.Strategy) { case MoveStrategy.AddContextToExisting: if (CurrentlySelectedContextProvider.SelectedContext != null) { this.CurrentContext.Add(CurrentlySelectedContextProvider.SelectedContext); //Notify that the context was added MessageBus.Current.SendMessage(new AddContextMessage(CurrentlySelectedContextProvider.SelectedContext)); } break; case MoveStrategy.StartFresh: foreach (var context in CurrentContext.ToArray()) { this.CurrentContext.Remove(context); //Notify that the context was removed MessageBus.Current.SendMessage(new RemoveContextMessage(context)); } break; case MoveStrategy.MoveBackwards: var contextToMoveTo = this.CurrentContext.Where(o => o.GetType().ToString() == message.TypeOfDetailsView).LastOrDefault(); if (contextToMoveTo != null) { SetObjectDisplayControl(contextToMoveTo.GetType().ToString(), contextToMoveTo); } break; } var objectDisplay = ObjectTypeDisplay(message.TypeOfDetailsView); if (objectDisplay != null && objectDisplay.ContextProvider != null) CurrentlySelectedContextProvider = objectDisplay.ContextProvider; //Setup the UI SetupUI(); }
public ContextProviderChangedMessage(IProvideContext contextProvider) { CurrentContextProvider = contextProvider; }