Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit e6ee44d

Browse files
committed
Add GetViewModelAsync for GitHubPane
We need an async way to obtain the IGitHubPaneViewModel.
1 parent 2fc764b commit e6ee44d

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/GitHub.VisualStudio/GitHubPackage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public async Task<IGitHubPaneViewModel> ShowGitHubPane()
149149
}
150150

151151
var gitHubPane = (GitHubPane)pane;
152-
var viewModel = (IGitHubPaneViewModel)(gitHubPane.View).DataContext;
152+
var viewModel = await gitHubPane.GetViewModelAsync();
153153
await viewModel.InitializeAsync(pane);
154154
return viewModel;
155155
}

src/GitHub.VisualStudio/UI/GitHubPane.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using ReactiveUI;
1717
using Task = System.Threading.Tasks.Task;
1818
using IAsyncServiceProvider = Microsoft.VisualStudio.Shell.IAsyncServiceProvider;
19+
using System.Threading.Tasks;
1920

2021
namespace 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

Comments
 (0)