/// <summary> /// Removes the blade asynchronous. /// </summary> /// <param name="owner">The owner.</param> /// <param name="viewmodel">The viewmodel.</param> /// <returns>Task.</returns> public Task RemoveBladeAsync(IViewModelBladeView owner, IViewModelBlade viewmodel) { Argument.IsNotNull(owner); if (owner.Blades is not null) { if (owner.Blades.Remove( owner.Blades .FirstOrDefault(q => q.ViewModel == viewmodel && ((IViewModelBlade)q.ViewModel).Owner == viewmodel.Owner)) ) { if (owner.Blades.Count < 1) { owner.IsPaneVisible = false; } else if (owner.Blades.Last() is IView blade) { blade.IsEnabled = true; } } } return Task.CompletedTask; }
/// <summary> /// open blade as an asynchronous operation. /// </summary> /// <param name="owner">The owner.</param> /// <param name="viewmodel">The viewmodel.</param> /// <returns>Task.</returns> public async Task OpenBladeAsync(IViewModelBladeView owner, IViewModelBlade viewmodel) { Argument.IsNotNull(owner); viewmodel.Owner = owner; viewmodel.Closed += Viewmodel_Closed; var view = await GetNavigationBladeAsync(viewmodel); if (!owner.Blades.Any(a => a.GetType().FullName.Equals(view.GetType().FullName))) { foreach (var blade in owner.Blades) { blade.IsEnabled = false; } owner.Blades.Add(view); } owner.IsPaneVisible = true; }