Example #1
0
        public void OnLayoutLoaded(LayoutLoadedArgs args)
        {
            var matchingAnchorables = args.LayoutAnchorables.Where(anch => anch.Content.GetType() == Definition.View &&
                                                                   anch.Content.SafeCast <UserControl>().DataContext.GetType() == Definition.ViewModel &&
                                                                   anch.IsVisible);

            var rougeAnchorables = ActivePanels.Where(o => !matchingAnchorables.Select(anch => anch.Content.SafeCast <UserControl>().DataContext).
                                                      Contains(o.Content.SafeCast <UserControl>().DataContext));

            foreach (var anchorable in rougeAnchorables.ToList())
            {
                RemoveDynamicPanel(anchorable);
            }

            foreach (var invalidationSubscription in InvalidationSubscriptions)
            {
                invalidationSubscription.Event.Unsubscribe(invalidationSubscription.Token);
            }

            InvalidationSubscriptions.Clear();
            ActivePanels.Clear();
            foreach (var anchorable in matchingAnchorables)
            {
                ResolveDynamicPanelDependencies(anchorable);
                ActivePanels.Add(anchorable);
            }

            SyncSelection(ActivePanels.Select(o => o.Content.SafeCast <UserControl>().DataContext));
        }
Example #2
0
        private void OnSelectionBindingChanged()
        {
            var activeViewModels = ActivePanels.Select(o => o.Content.SafeCast <UserControl>().DataContext);

            var addedItems = ViewModelSelection.SelectedObject.Except(activeViewModels).ToList();

            foreach (var item in addedItems)
            {
                CreateAndAddDynamicPanel(item);
            }

            var removedItems = activeViewModels.Except(ViewModelSelection.SelectedObject).ToList();

            foreach (var item in removedItems)
            {
                var anchorable = ActivePanels.Single(anch => anch.Content.SafeCast <UserControl>().DataContext == item);
                RemoveDynamicPanel(anchorable);
            }
        }