private void InitShell()
{
if (ShellConstants.IsPowerShellInstalled)
{
var shell = new EmbeddedShellView();
shell.Start(this);
this.PowerShellTab.Content = shell;
RoutedPropertyChangedEventHandler<object> onSelectedItemChanged = (sender, e) => shell.NotifySelected(this.CurrentSelection);
Action<VisualTreeItem> onProviderLocationChanged = item => this.Dispatcher.BeginInvoke(new Action(() =>
{
item.IsSelected = true;
this.CurrentSelection = item;
}));
// sync the current location
this.Tree.SelectedItemChanged += onSelectedItemChanged;
shell.ProviderLocationChanged += onProviderLocationChanged;
// clean up garbage!
this.Closed += delegate
{
this.Tree.SelectedItemChanged -= onSelectedItemChanged;
shell.ProviderLocationChanged -= onProviderLocationChanged;
};
}
}