Example #1
0
        /// <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;
        }
Example #2
0
        /// <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;
        }