public void ShowChildWindowView <TView>( ViewRequest viewRequest = null, UiShowChildWindowOptions options = null) where TView : class, IView { ShowChildWindowView <TView, Unit>(); }
public RecepientManagerViewModel(ICachedService cachedService, IShell shell) { CanClose = false; this.cachedService = cachedService; Shell = shell as CachedServiceShell; var editorOptions = new UiShowChildWindowOptions { IsModal = true, AllowMove = true, CanClose = true, ShowTitleBar = true, Title = "Recepient group editing" }; CreateGroupCommand = ReactiveCommand.CreateFromTask(async() => { await Shell.ShowChildWindowView <RecepientEditorView, Unit>( new RecepientEditorRequest { Group = new ApiRecepientGroup() }, editorOptions); }, Shell.CanEdit); EditGroupCommand = ReactiveCommand.CreateFromTask(async() => { await Shell.ShowChildWindowView <RecepientEditorView, Unit>( new RecepientEditorRequest { Group = SelectedGroup }, editorOptions); }, Shell.CanEdit); }
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)); }
private async Task SelectOperFromTemplates() { var editorOptions = new UiShowChildWindowOptions { IsModal = true, AllowMove = true, CanClose = true, ShowTitleBar = true, Title = "Select operation template", Width = 700 }; await Shell.ShowChildWindowView <OperTemplatesListView, Unit>( new OperTemplatesListRequest { TaskEditor = this }, editorOptions); }
public ChildWindowView(UiShowChildWindowOptions options) { DataContext = options; InitializeComponent(); }
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 )); }