Beispiel #1
0
        async Task NavigateTo <TViewModel>(Func <TViewModel, Task> initialize, Func <TViewModel, bool> match = null)
            where TViewModel : class, IPanePageViewModel
        {
            Guard.ArgumentNotNull(initialize, nameof(initialize));

            if (Content != navigator)
            {
                return;
            }
            await navigating.WaitAsync();

            try
            {
                var viewModel = navigator.History
                                .OfType <TViewModel>()
                                .FirstOrDefault(x => match?.Invoke(x) ?? true);

                if (viewModel == null)
                {
                    viewModel = viewModelFactory.CreateViewModel <TViewModel>();
                    navigator.NavigateTo(viewModel);
                    await initialize(viewModel);
                }
                else if (navigator.Content != viewModel)
                {
                    navigator.NavigateTo(viewModel);
                }
            }
            finally
            {
                navigating.Release();
            }
        }