예제 #1
0
        private void AddProgressItem(Window window, IProgressItemViewModel <T> itemViewModel)
        {
            var viewModel = (ProgressViewModel)window.DataContext;

            viewModel.ProgressItems.Add(itemViewModel);

            var cleanup = new DisposeManager();

            cleanup.AddEvent(h => itemViewModel.Completed += h, h => itemViewModel.Completed -= h,
                             (EventHandler)((s, e) => HandleCompletedOrCanceled(cleanup, window, viewModel, itemViewModel, true)));
            cleanup.AddEvent(h => itemViewModel.Canceled += h, h => itemViewModel.Canceled -= h,
                             (EventHandler)((s, e) => HandleCompletedOrCanceled(cleanup, window, viewModel, itemViewModel, false)));
        }
예제 #2
0
 private void StartDialog(IProgressItemViewModel <T> itemViewModel)
 {
     DispatcherViewFactory.InvokeAsync("Secondary GUI", () =>
     {
         var window = _window;
         if (window == null)
         {
             window = _window = PrepareProgressView();
             AddProgressItem(window, itemViewModel);
             window.Closing += HandleWindowClosing;
             window.Show();
         }
         else
         {
             AddProgressItem(window, itemViewModel);
         }
     }).ConfigureAwait(false);
 }
예제 #3
0
 private bool CanResume(IProgressItemViewModel item)
 {
     return(item != null && item.ResumeCommand.CanExecute(null));
 }
예제 #4
0
 private void HandleResume(IProgressItemViewModel item)
 {
     item.ResumeCommand.TryExecute(null);
 }
예제 #5
0
 private void HandlePause(IProgressItemViewModel item)
 {
     item.PauseCommand.TryExecute(null);
 }
예제 #6
0
 private void HandleCompletedOrCanceled(DisposeManager cleanup, Window window, ProgressViewModel viewModel, IProgressItemViewModel <T> itemViewModel, bool isCompleted)
 {
     cleanup.Dispose();
     window.Dispatcher.CheckedInvoke(() =>
     {
         viewModel.ProgressItems.Remove(itemViewModel);
         if (viewModel.ProgressItems.Count == 0)
         {
             Task.Delay(1000);
             if (_window != null && _window.IsVisible)
             {
                 viewModel.OkCommand.TryExecute(null);
             }
             _window    = null;
             var result = new AsyncActivityResult <IProgressItemViewModel <T> >(isCompleted, itemViewModel);
             Completion.TrySetResult(result);
         }
     });
 }