private static void HandleDisplay(FragmentContentViewer viewer, ViewModelFragment oldValue, ViewModelFragment newValue) { if (oldValue != null) { oldValue.Dispose(); } if (newValue != null) { var viewType = FragmentManager.ResolveFragmentView(newValue.GetType()); if (viewType != null) { var view = Activator.CreateInstance(viewType) as FrameworkElement; var newFragment = newValue as ViewModelFragment; view.DataContext = newFragment; newFragment.UI.SetUIElement(view, viewer); viewer.PART_ContentPresenter.Content = view; if (viewer.AutoInvoke) { newFragment.Invoke(viewer.DataContext as ViewModelBase, viewer.InvokeParameter); } } } else { viewer.PART_ContentPresenter.Content = null; } }
public static void SetHandleVisibilityChange(DependencyObject element, bool value) { element.SetValue(HandleVisibilityChangeProperty, value); Grid control = element as Grid; ViewModelFragment fragment = control.DataContext as ViewModelFragment; if (value) { var key = element.RegisterPropertyChangedCallback(UIElement.VisibilityProperty, new DependencyPropertyChangedCallback((DependencyObject cont, DependencyProperty proper) => { fragment.OnVisibilityChanged((Visibility)cont.GetValue(proper), null); })); element.SetValue(HandleVisibilityChange_HandlerProperty, key); } else { var key = (long)element.GetValue(HandleVisibilityChange_HandlerProperty); element.UnregisterPropertyChangedCallback(UIElement.VisibilityProperty, key); } }