1616using ReactiveUI ;
1717using Task = System . Threading . Tasks . Task ;
1818using IAsyncServiceProvider = Microsoft . VisualStudio . Shell . IAsyncServiceProvider ;
19+ using System . Threading . Tasks ;
1920
2021namespace GitHub . VisualStudio . UI
2122{
@@ -34,9 +35,12 @@ namespace GitHub.VisualStudio.UI
3435 public class GitHubPane : ToolWindowPane , IServiceProviderAware
3536 {
3637 public const string GitHubPaneGuid = "6b0fdc0a-f28e-47a0-8eed-cc296beff6d2" ;
38+
39+ readonly TaskCompletionSource < IGitHubPaneViewModel > viewModelSource =
40+ new TaskCompletionSource < IGitHubPaneViewModel > ( ) ;
41+
3742 bool initialized = false ;
3843 IDisposable viewSubscription ;
39- IGitHubPaneViewModel viewModel ;
4044 ContentPresenter contentPresenter ;
4145
4246 public FrameworkElement View
@@ -92,6 +96,8 @@ public void Initialize(IServiceProvider serviceProvider)
9296 }
9397 }
9498
99+ public Task < IGitHubPaneViewModel > GetViewModelAsync ( ) => viewModelSource . Task ;
100+
95101 async Task InitializeAsync ( IServiceProvider serviceProvider )
96102 {
97103 // Allow MEF to initialize its cache asynchronously
@@ -104,11 +110,13 @@ async Task InitializeAsync(IServiceProvider serviceProvider)
104110 teServiceHolder . ServiceProvider = serviceProvider ;
105111
106112 var factory = provider . GetService < IViewViewModelFactory > ( ) ;
107- viewModel = provider . ExportProvider . GetExportedValue < IGitHubPaneViewModel > ( ) ;
113+ var viewModel = provider . ExportProvider . GetExportedValue < IGitHubPaneViewModel > ( ) ;
108114 viewModel . InitializeAsync ( this ) . Catch ( ShowError ) . Forget ( ) ;
109115
110116 View = factory . CreateView < IGitHubPaneViewModel > ( ) ;
111117 View . DataContext = viewModel ;
118+
119+ viewModelSource . SetResult ( viewModel ) ;
112120 }
113121
114122 [ SuppressMessage ( "Microsoft.Design" , "CA1061:DoNotHideBaseClassMethods" , Justification = "WTF CA, I'm overriding!" ) ]
0 commit comments