public static async Task <T> OpenAsyncQuery <T>(this IScreenOpener opener, IQuery <T> query, CancellationToken cancelToken = default(CancellationToken)) where T : class, IScreenViewModel { var viewModel = await opener.Send(query, cancelToken).ConfigureAwait(false); await opener.OpenAsync(viewModel).ConfigureAwait(false); return(viewModel); }
public static async Task <T> OpenAsyncQueryCached <T>(this IScreenOpener opener, IQuery <T> query) where T : class, IScreenViewModel { var t = typeof(T); if (cached.ContainsKey(t)) { var vm = cached[t]; if (vm.IsOpen) { await vm.Activate.ExecuteAsyncTask().ConfigureAwait(false); return((T)vm); } } var viewModel = await opener.Send(query).ConfigureAwait(false); cached.Add(t, viewModel); await opener.OpenAsync(viewModel).ConfigureAwait(false); HandleClosing(viewModel, t); return(viewModel); }