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)); }
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); } }