public void ShowTool( Func <ILifetimeScope, IToolView> toolFactory, ViewRequest viewRequest = null, UiShowOptions options = null) { ShowToolIn(DefaultDockingManager.Tools, toolFactory, viewRequest, options); }
public void ShowTool <TToolView>( ViewRequest viewRequest = null, UiShowOptions options = null) where TToolView : class, IToolView { var view = Container.Resolve <TToolView>(); if (options != null) { view.Configure(options); } (view.ViewModel as IInitializableViewModel)?.Initialize(viewRequest); var layoutAnchorable = new LayoutAnchorable { CanClose = false, CanAutoHide = false, CanHide = false, CanFloat = false, }; layoutAnchorable.Content = view; ToolsPane.Children.Add(layoutAnchorable); }
public void ShowView <TView>( ViewRequest viewRequest = null, UiShowOptions options = null) where TView : class, IView { var view = Container.Resolve <TView>(); if (options != null) { view.Configure(options); } var layoutDocument = new LayoutDocument { Content = view }; if (options != null) { layoutDocument.CanClose = options.CanClose; } AddTitleRefreshing(view, layoutDocument); AddClosingByRequest(view, layoutDocument); DocumentPane.Children.Add(layoutDocument); // TODO: provide parameters to ViewModel ??? (view.ViewModel as IInitializableViewModel)?.Initialize(viewRequest); layoutDocument.IsActive = true; }
public void ShowView( Func <ILifetimeScope, IView> viewFactory, ViewRequest viewRequest = null, UiShowOptions options = null) { ShowViewIn(DefaultDockingManager.Views, viewFactory, viewRequest, options); }
public async void ShowFlyoutView <TView>( ViewRequest viewRequest = null, UiShowFlyoutOptions options = null) where TView : class, IView { await ShowFlyoutView <TView, Unit>(); }
public void ShowChildWindowView <TView>( ViewRequest viewRequest = null, UiShowChildWindowOptions options = null) where TView : class, IView { ShowChildWindowView <TView, Unit>(); }
private static void ActivateContent(LayoutContent layoutContent, ViewRequest viewRequest) { layoutContent.IsActive = true; if (layoutContent.Content is IView view && view.ViewModel is Ui.Wpf.Common.ViewModels.IActivatableViewModel activatableViewModel) { activatableViewModel.Activate(viewRequest); } }
public Task <TResult> ShowChildWindowView <TView, TResult>( ViewRequest viewRequest = null, UiShowChildWindowOptions options = null) where TView : class, IView { return(ShowChildWindowView <TResult>( container => container.Resolve <TView>(), viewRequest, options)); }
public void ShowView <TView>( ViewRequest viewRequest = null, UiShowOptions options = null) where TView : class, IView { ShowViewIn(DefaultDockingManager.Views, container => container.Resolve <TView>(), viewRequest, options); }
public void ShowTool <TToolView>( ViewRequest viewRequest = null, UiShowOptions options = null) where TToolView : class, IToolView { ShowToolIn(DefaultDockingManager.Tools, container => container.Resolve <TToolView>(), viewRequest, options); }
public void ShowToolIn <TToolView>( string containerName, ViewRequest viewRequest = null, UiShowOptions options = null) where TToolView : class, IToolView { ShowToolIn(containerName, container => container.Resolve <TToolView>(), viewRequest, options); }
private static void InitializeView(IView view, ViewRequest viewRequest) { if (view.ViewModel is ViewModelBase vmb) { vmb.ViewId = viewRequest?.ViewId; } if (view.ViewModel is IInitializableViewModel initializibleViewModel) { initializibleViewModel.Initialize(viewRequest); } }
public void ShowView <TView>( ViewRequest viewRequest = null, UiShowOptions options = null) where TView : class, IView { var layoutContent = null; if (viewRequest?.ViewId != null) { layoutContent = DocumentPane.Children.FirstOrDefault(x => x.ContentId == viewRequest?.ViewId); } if (layoutContent != null) { layoutContent.IsActive = true; } else { var view = Container.Resolve <TView>(); if (options != null) { view.Configure(options); } var layoutDocument = new LayoutDocument { Content = view }; layoutDocument.ContentId = viewRequest?.ViewId; if (options != null) { layoutDocument.CanClose = options.CanClose; } AddTitleRefreshing(view, layoutDocument); AddClosingByRequest(view, layoutDocument); DocumentPane.Children.Add(layoutDocument); (view.ViewModel as ViewModelBase)?.ViewId = viewRequest?.ViewId; (view.ViewModel as IInitializableViewModel)?.Initialize(viewRequest); layoutDocument.IsActive = true; } }
public void ShowViewIn( string containerName, Func <ILifetimeScope, IView> viewFactory, ViewRequest viewRequest = null, UiShowOptions options = null) { var documentPane = DockingManager.FindObjectByName <LayoutGroup <LayoutContent> >(containerName); var layoutDocument = documentPane.FindByViewRequest <LayoutContent>(viewRequest); if (layoutDocument == null) { var view = viewFactory(Container); if (options != null) { view.Configure(options); } layoutDocument = new LayoutDocument { ContentId = viewRequest?.ViewId, Content = view }; if (options != null) { layoutDocument.CanClose = options.CanClose; } AddTitleRefreshing(view, layoutDocument); AddWindowBehaviour(view, layoutDocument); AddClosingByRequest(view, layoutDocument); documentPane.Children.Add(layoutDocument); InitializeView(view, viewRequest); } ActivateContent(layoutDocument, viewRequest); }
public void ShowToolIn( string containerName, Func <ILifetimeScope, IToolView> toolFactory, ViewRequest viewRequest = null, UiShowOptions options = null) { var toolsPane = DockingManager.FindObjectByName <LayoutGroup <LayoutAnchorable> >(containerName); var layoutAnchorable = toolsPane.FindByViewRequest <LayoutAnchorable>(viewRequest); if (layoutAnchorable == null) { var view = toolFactory(Container); if (options != null) { view.Configure(options); } layoutAnchorable = new LayoutAnchorable { ContentId = viewRequest?.ViewId, Content = view, CanAutoHide = false, CanFloat = false, }; view.ViewModel.CanClose = false; view.ViewModel.CanHide = false; AddTitleRefreshing(view, layoutAnchorable); AddWindowBehaviour(view, layoutAnchorable); AddClosingByRequest(view, layoutAnchorable); toolsPane.Children.Add(layoutAnchorable); InitializeView(view, viewRequest); } ActivateContent(layoutAnchorable, viewRequest); }
public async void ShowChildWindowView(Func <ILifetimeScope, IView> viewFactory, ViewRequest viewRequest = null, UiShowChildWindowOptions options = null) { await ShowChildWindowView <Unit>(viewFactory, viewRequest, options); }
public Task <TResult> ShowChildWindowView <TResult>(Func <ILifetimeScope, IView> viewFactory, ViewRequest viewRequest = null, UiShowChildWindowOptions options = null) { if (!string.IsNullOrEmpty(viewRequest?.ViewId)) { var metroDialogContainer = Window.Template.FindName("PART_MetroActiveDialogContainer", Window) as Grid; metroDialogContainer = metroDialogContainer ?? Window.Template.FindName("PART_MetroInactiveDialogsContainer", Window) as Grid; if (metroDialogContainer == null) { throw new InvalidOperationException( "The provided child window can not add, there is no container defined."); } var viewOld = metroDialogContainer.Children .Cast <ChildWindowView>() .Select(x => (IView)x.Content) .FirstOrDefault(x => (x.ViewModel as ViewModelBase)?.ViewId == viewRequest.ViewId); if (viewOld != null) { (viewOld.ViewModel as Ui.Wpf.Common.ViewModels.IActivatableViewModel)?.Activate(viewRequest); return(Task.FromResult(default(TResult))); } } var view = viewFactory(Container); if (options != null) { view.Configure(options); } InitializeView(view, viewRequest); (view.ViewModel as Ui.Wpf.Common.ViewModels.IActivatableViewModel)?.Activate(viewRequest); options = options ?? new UiShowChildWindowOptions(); var childWindow = new ChildWindowView(options) { Content = view }; var vm = view.ViewModel as ViewModelBase; if (vm != null) { Observable .FromEventPattern <ViewModelCloseQueryArgs>( x => vm.CloseQuery += x, x => vm.CloseQuery -= x) .Subscribe(x => { if (vm is IResultableViewModel <TResult> model) { childWindow.Close(model.ViewResult); } else { childWindow.Close(); } }) .DisposeWith(vm.Disposables); Observable .FromEventPattern <CancelEventArgs>( x => childWindow.Closing += x, x => childWindow.Closing -= x) .Subscribe(x => { var vcq = new ViewModelCloseQueryArgs { IsCanceled = false }; vm.Closing(vcq); if (vcq.IsCanceled) { x.EventArgs.Cancel = true; } }) .DisposeWith(vm.Disposables); } var disposables = new CompositeDisposable(); view.ViewModel .WhenAnyValue(x => x.Title) .Subscribe(x => childWindow.Title = x) .DisposeWith(disposables); view.ViewModel .WhenAnyValue(x => x.CanClose) .Subscribe(x => childWindow.ShowCloseButton = x) .DisposeWith(disposables); Observable .FromEventPattern <RoutedEventHandler, RoutedEventArgs>( x => childWindow.ClosingFinished += x, x => childWindow.ClosingFinished -= x) .Select(x => (ChildWindow)x.Sender) .Take(1) .Subscribe(x => { disposables.Dispose(); vm?.Closed(new ViewModelCloseQueryArgs()); x.Content = null; }); return(Window.ShowChildWindowAsync <TResult>( childWindow, options.OverlayFillBehavior )); }
public async Task <TResult> ShowFlyoutView <TResult>(Func <ILifetimeScope, IView> viewFactory, ViewRequest viewRequest = null, UiShowFlyoutOptions options = null) { if (!string.IsNullOrEmpty(viewRequest?.ViewId)) { var viewOld = FlyoutsControl.Items .Cast <Flyout>() .Select(x => (IView)x.Content) .FirstOrDefault(x => (x.ViewModel as ViewModelBase)?.ViewId == viewRequest.ViewId); if (viewOld != null) { (viewOld.ViewModel as Ui.Wpf.Common.ViewModels.IActivatableViewModel)?.Activate(viewRequest); return(default(TResult)); } } var view = viewFactory(Container); if (options != null) { view.Configure(options); } options = options ?? new UiShowFlyoutOptions(); var flyout = new Flyout { IsModal = options.IsModal, Position = options.Position, Theme = options.Theme, ExternalCloseButton = options.ExternalCloseButton, IsPinned = options.IsPinned, CloseButtonIsCancel = options.CloseByEscape, CloseCommand = options.CloseCommand, CloseCommandParameter = options.CloseCommandParameter, AnimateOpacity = options.AnimateOpacity, AreAnimationsEnabled = options.AreAnimationsEnabled, IsAutoCloseEnabled = options.IsAutoCloseEnabled, AutoCloseInterval = options.AutoCloseInterval, Width = options.Width ?? double.NaN, Height = options.Height ?? double.NaN, Content = view, IsOpen = true }; var vm = view.ViewModel as ViewModelBase; if (vm != null) { Observable .FromEventPattern <ViewModelCloseQueryArgs>( x => vm.CloseQuery += x, x => vm.CloseQuery -= x) .Subscribe(x => flyout.IsOpen = false) .DisposeWith(vm.Disposables); } var disposables = new CompositeDisposable(); view.ViewModel .WhenAnyValue(x => x.Title) .Subscribe(x => { flyout.Header = x; flyout.TitleVisibility = !string.IsNullOrEmpty(x) ? Visibility.Visible : Visibility.Collapsed; }) .DisposeWith(disposables); view.ViewModel .WhenAnyValue(x => x.CanClose) .Subscribe(x => flyout.CloseButtonVisibility = x ? Visibility.Visible : Visibility.Collapsed) .DisposeWith(disposables); var closedObservable = Observable .FromEventPattern <RoutedEventHandler, RoutedEventArgs>( x => flyout.ClosingFinished += x, x => flyout.ClosingFinished -= x); FlyoutsControl.Items.Add(flyout); InitializeView(view, viewRequest); (view.ViewModel as Ui.Wpf.Common.ViewModels.IActivatableViewModel)?.Activate(viewRequest); await closedObservable.FirstAsync(); disposables.Dispose(); vm?.Closed(new ViewModelCloseQueryArgs()); flyout.Content = null; FlyoutsControl.Items.Remove(flyout); if (vm is IResultableViewModel <TResult> model) { return(model.ViewResult); } return(default(TResult)); }