/// <summary> /// Called when deactivating. /// </summary> /// <param name="close">Indicates whether this instance will be closed.</param> /// <param name="cancellationToken">The cancellation token to cancel operation.</param> /// <returns>A task that represents the asynchronous operation.</returns> protected override async Task OnDeactivateAsync(bool close, CancellationToken cancellationToken) { if (close) { foreach (var deactivate in _items.OfType <IDeactivate>()) { await deactivate.DeactivateAsync(true, cancellationToken); } _items.Clear(); } else { await ScreenExtensions.TryDeactivateAsync(ActiveItem, false, cancellationToken); } }
private async Task CloseItemCoreAsync(T item, CancellationToken cancellationToken = default) { if (item.Equals(ActiveItem)) { var index = _items.IndexOf(item); var next = DetermineNextItemToActivate(_items, index); await ChangeActiveItemAsync(next, true); } else { await ScreenExtensions.TryDeactivateAsync(item, true, cancellationToken); } _items.Remove(item); }
/// <summary> /// Deactivates the specified item. /// </summary> /// <param name="item">The item to close.</param> /// <param name="close">Indicates whether or not to close the item after deactivating it.</param> /// <param name="cancellationToken">The cancellation token to cancel operation.</param> /// <returns>A task that represents the asynchronous operation.</returns> public override async Task DeactivateItemAsync(T item, bool close, CancellationToken cancellationToken = default) { if (item == null) { return; } if (!close) { await ScreenExtensions.TryDeactivateAsync(item, false, cancellationToken); } else { var closeResult = await CloseStrategy.ExecuteAsync(new[] { item }, CancellationToken.None); if (closeResult.CloseCanOccur) { await CloseItemCoreAsync(item, cancellationToken); } } }
private async Task CloseItemCoreAsync(T item, CancellationToken cancellationToken) { await ScreenExtensions.TryDeactivateAsync(item, true, cancellationToken); _items.Remove(item); }
/// <summary> /// Called when deactivating. /// </summary> /// <param name="close">Indicates whether this instance will be closed.</param> /// <param name="cancellationToken">The cancellation token to cancel operation.</param> /// <returns>A task that represents the asynchronous operation.</returns> protected override Task OnDeactivateAsync(bool close, CancellationToken cancellationToken) { return(ScreenExtensions.TryDeactivateAsync(ActiveItem, close, cancellationToken)); }