private void cmbTargetStorage_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cmbSender = (ComboBox)sender; if (cmbSender.SelectedItem == null) { _AsmDataDisk.TargetStorageAccount = null; } else { if (cmbSender.SelectedItem.GetType() == typeof(Azure.Asm.StorageAccount)) { Azure.Asm.StorageAccount asmStorageAccount = (Azure.Asm.StorageAccount)cmbSender.SelectedItem; _AsmDataDisk.TargetStorageAccount = asmStorageAccount; } else if (cmbSender.SelectedItem.GetType() == typeof(Azure.Arm.StorageAccount)) { Azure.Arm.StorageAccount armStorageAccount = (Azure.Arm.StorageAccount)cmbSender.SelectedItem; _AsmDataDisk.TargetStorageAccount = armStorageAccount; } else { _AsmDataDisk.TargetStorageAccount = null; } } UpdateParentNode(); PropertyChanged(); }
private void rbStorageAccountInMigration_CheckedChanged(object sender, EventArgs e) { RadioButton rbSender = (RadioButton)sender; if (rbSender.Checked) { cmbTargetStorage.Items.Clear(); cmbTargetStorage.Enabled = true; TreeNode targetResourceGroupNode = _AsmToArmForm.SeekARMChildTreeNode(_AsmToArmForm.TargetResourceGroup.Name, _AsmToArmForm.TargetResourceGroup.GetFinalTargetName(), _AsmToArmForm.TargetResourceGroup, false); TreeNode storageAccountsNode = _AsmToArmForm.SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Storage Accounts", "Storage Accounts", "Storage Accounts", false); if (storageAccountsNode != null) { foreach (TreeNode armStorageAccountNode in storageAccountsNode.Nodes) { TreeNode asmStorageAccountNode = (TreeNode)armStorageAccountNode.Tag; cmbTargetStorage.Items.Add(asmStorageAccountNode.Tag); } } if ((_AsmDataDisk.TargetStorageAccount == null) || (_AsmDataDisk.TargetStorageAccount.GetType() == typeof(Azure.Arm.StorageAccount))) { } else { for (int i = 0; i < cmbTargetStorage.Items.Count; i++) { Azure.Asm.StorageAccount cmbStorageAccount = (Azure.Asm.StorageAccount)cmbTargetStorage.Items[i]; if (cmbStorageAccount.Id == _AsmDataDisk.TargetStorageAccount.Id) { cmbTargetStorage.SelectedIndex = i; break; } } // Using a for loop above, because this was always selecting Index 0, even when matched on a higher ( > 0) indexed item //foreach (Azure.Asm.StorageAccount asmStorageAccount in cmbTargetStorage.Items) //{ // if (asmStorageAccount.Id == _AsmDataDisk.TargetStorageAccount.Id) // { // cmbTargetStorage.SelectedItem = asmStorageAccount; // break; // } //} if (cmbTargetStorage.SelectedItem == null) { _LogProvider.WriteLog("rbStorageAccountInMigration_CheckedChanged", "Unable to location previously selected ASM Storage Account '" + _AsmDataDisk.TargetStorageAccount.Id + "' as an object included for ASM to ARM migration. Please select a target storage account for the Azure Disk."); } } } }
private void txtTargetName_TextChanged(object sender, EventArgs e) { TextBox txtSender = (TextBox)sender; TreeNode asmStorageAccountNode = (TreeNode)_ArmStorageAccountNode.Tag; if (asmStorageAccountNode.Tag.GetType() == typeof(Azure.Asm.StorageAccount)) { Azure.Asm.StorageAccount asmStorageAccount = (Azure.Asm.StorageAccount)asmStorageAccountNode.Tag; asmStorageAccount.TargetName = txtSender.Text; _ArmStorageAccountNode.Text = asmStorageAccount.GetFinalTargetName(); } else if (asmStorageAccountNode.Tag.GetType() == typeof(Azure.Arm.StorageAccount)) { Azure.Arm.StorageAccount armStorageAccount = (Azure.Arm.StorageAccount)asmStorageAccountNode.Tag; armStorageAccount.TargetName = txtSender.Text; _ArmStorageAccountNode.Text = armStorageAccount.GetFinalTargetName(); } PropertyChanged(); }
public async Task Save(Guid subscriptionId, List <TreeNode> selectedNodes) { string jsontext = String.Empty; try { StreamReader saveSelectionReader = new StreamReader(filePath); jsontext = saveSelectionReader.ReadToEnd(); saveSelectionReader.Close(); saveSelections = JsonConvert.DeserializeObject <List <SaveSelection> >(jsontext); // If save selection for this subscription alredy exists, remove it if (saveSelections.Exists(x => x.SubscriptionId == subscriptionId)) { saveSelections.Remove(saveSelections.Find(x => x.SubscriptionId == subscriptionId)); } } catch { // If file does not exist, or invalid, starts a new object saveSelections = new List <SaveSelection>(); } SaveSelection saveSelection = new SaveSelection(); saveSelection.SubscriptionId = subscriptionId; saveSelection.VirtualNetworks = new List <SaveSelectionVirtualNetwork>(); saveSelection.StorageAccounts = new List <SaveSelectioStorageAccount>(); saveSelection.VirtualMachines = new List <SaveSelectionVirtualMachine>(); if (selectedNodes != null) { foreach (TreeNode treeNode in selectedNodes) { if (treeNode.Tag != null) { Type tagType = treeNode.Tag.GetType(); if (tagType == typeof(Azure.Asm.VirtualNetwork)) { Azure.Asm.VirtualNetwork asmVirtualNetwork = (Azure.Asm.VirtualNetwork)treeNode.Tag; SaveSelectionVirtualNetwork saveSelectionVirtualNetwork = new SaveSelectionVirtualNetwork(); saveSelectionVirtualNetwork.VirtualNetworkName = asmVirtualNetwork.Name; saveSelection.VirtualNetworks.Add(saveSelectionVirtualNetwork); } else if (tagType == typeof(Azure.Asm.StorageAccount)) { Azure.Asm.StorageAccount asmStorageAccount = (Azure.Asm.StorageAccount)treeNode.Tag; SaveSelectioStorageAccount saveSelectionStorageAccount = new SaveSelectioStorageAccount(); saveSelectionStorageAccount.StorageAccountName = asmStorageAccount.Name; saveSelectionStorageAccount.TargetStorageAccountName = asmStorageAccount.TargetName; saveSelection.StorageAccounts.Add(saveSelectionStorageAccount); } else if (tagType == typeof(Azure.Asm.VirtualMachine)) { Azure.Asm.VirtualMachine asmVirtualMachine = (Azure.Asm.VirtualMachine)treeNode.Tag; SaveSelectionVirtualMachine saveSelectionVirtualMachine = new SaveSelectionVirtualMachine(); saveSelectionVirtualMachine.CloudService = asmVirtualMachine.CloudServiceName; saveSelectionVirtualMachine.VirtualMachine = asmVirtualMachine.RoleName; if (asmVirtualMachine.TargetVirtualNetwork != null) { saveSelectionVirtualMachine.TargetVirtualNetwork = asmVirtualMachine.TargetVirtualNetwork.Id; } if (asmVirtualMachine.TargetSubnet != null) { saveSelectionVirtualMachine.TargetSubnet = asmVirtualMachine.TargetSubnet.Id; } // Add OS Disk Target Storage Account if (asmVirtualMachine.OSVirtualHardDisk.TargetStorageAccount != null) { saveSelectionVirtualMachine.TargetDiskStorageAccounts.Add(asmVirtualMachine.OSVirtualHardDisk.DiskName, asmVirtualMachine.OSVirtualHardDisk.TargetStorageAccount.Id); } // Add OS Disk Target Storage Account foreach (Azure.Asm.Disk asmDataDisk in asmVirtualMachine.DataDisks) { if (asmDataDisk.TargetStorageAccount != null) { saveSelectionVirtualMachine.TargetDiskStorageAccounts.Add(asmDataDisk.DiskName, asmDataDisk.TargetStorageAccount.Id); } } saveSelection.VirtualMachines.Add(saveSelectionVirtualMachine); } } } } saveSelections.Add(saveSelection); // save blob copy details file jsontext = JsonConvert.SerializeObject(saveSelections, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore }); StreamWriter saveSelectionWriter = new StreamWriter(filePath); saveSelectionWriter.Write(jsontext); saveSelectionWriter.Close(); }
public async Task Read(Guid subscriptionId, AzureRetriever sourceAzureRetreiver, AzureRetriever targetAzureRetreiver, TreeView treeView) { try { StreamReader saveSelectionReader = new StreamReader(filePath); string jsontext = saveSelectionReader.ReadToEnd(); saveSelectionReader.Close(); saveSelections = JsonConvert.DeserializeObject <List <SaveSelection> >(jsontext); } catch { // If file does not exist, or invalid, starts a new object saveSelections = new List <SaveSelection>(); } if (saveSelections.Exists(x => x.SubscriptionId == subscriptionId)) { SaveSelection saveSelection = saveSelections.Find(x => x.SubscriptionId == subscriptionId); foreach (SaveSelectionVirtualNetwork saveSelectionVirtualNetwork in saveSelection.VirtualNetworks) { foreach (TreeNode treeNode in treeView.Nodes.Find(saveSelectionVirtualNetwork.VirtualNetworkName, true)) { if (treeNode.Tag.GetType() == typeof(Azure.Asm.VirtualNetwork)) { Azure.Asm.VirtualNetwork asmVirtualNetwork = (Azure.Asm.VirtualNetwork)treeNode.Tag; treeNode.Checked = true; } } } foreach (SaveSelectioStorageAccount saveSelectionStorageAccount in saveSelection.StorageAccounts) { foreach (TreeNode treeNode in treeView.Nodes.Find(saveSelectionStorageAccount.StorageAccountName, true)) { if (treeNode.Tag.GetType() == typeof(Azure.Asm.StorageAccount)) { Azure.Asm.StorageAccount asmStorageAccount = (Azure.Asm.StorageAccount)treeNode.Tag; if (saveSelectionStorageAccount.TargetStorageAccountName.Length > 0) // We aren't going to reload a blank name, should it occur, as a name is required { asmStorageAccount.TargetName = saveSelectionStorageAccount.TargetStorageAccountName; } treeNode.Checked = true; } } } foreach (SaveSelectionVirtualMachine saveSelectionVirtualMachine in saveSelection.VirtualMachines) { foreach (TreeNode virtualMachineNode in treeView.Nodes.Find(saveSelectionVirtualMachine.VirtualMachine, true)) { if (virtualMachineNode.Tag != null) { if (virtualMachineNode.Tag.GetType() == typeof(Azure.Asm.VirtualMachine)) { Azure.Asm.VirtualMachine asmVirtualMachine = (Azure.Asm.VirtualMachine)virtualMachineNode.Tag; if (asmVirtualMachine.CloudServiceName == saveSelectionVirtualMachine.CloudService && asmVirtualMachine.RoleName == saveSelectionVirtualMachine.VirtualMachine) { asmVirtualMachine.TargetVirtualNetwork = SeekVirtualNetwork(saveSelectionVirtualMachine.TargetVirtualNetwork, await sourceAzureRetreiver.GetAzureAsmVirtualNetworks(), await targetAzureRetreiver.GetAzureARMVirtualNetworks()); asmVirtualMachine.TargetSubnet = SeekSubnet(saveSelectionVirtualMachine.TargetSubnet, asmVirtualMachine.TargetVirtualNetwork); if (saveSelectionVirtualMachine.TargetDiskStorageAccounts.ContainsKey(asmVirtualMachine.OSVirtualHardDisk.DiskName)) { asmVirtualMachine.OSVirtualHardDisk.TargetStorageAccount = SeekStorageAccount(saveSelectionVirtualMachine.TargetDiskStorageAccounts[asmVirtualMachine.OSVirtualHardDisk.DiskName].ToString(), await sourceAzureRetreiver.GetAzureAsmStorageAccounts(), await targetAzureRetreiver.GetAzureARMStorageAccounts()); } foreach (Azure.Asm.Disk asmDataDisk in asmVirtualMachine.DataDisks) { if (saveSelectionVirtualMachine.TargetDiskStorageAccounts.ContainsKey(asmDataDisk.DiskName)) { asmDataDisk.TargetStorageAccount = SeekStorageAccount(saveSelectionVirtualMachine.TargetDiskStorageAccounts[asmDataDisk.DiskName].ToString(), await sourceAzureRetreiver.GetAzureAsmStorageAccounts(), await targetAzureRetreiver.GetAzureARMStorageAccounts()); } } virtualMachineNode.Checked = true; } } } } } } }
private async Task <TreeNode> AddASMNodeToARMTree(TreeNode asmTreeNode) { TreeNode targetResourceGroupNode = SeekARMChildTreeNode(treeTargetARM.Nodes, _TargetResourceGroup.Name, _TargetResourceGroup.Name, _TargetResourceGroup, true); Type tagType = asmTreeNode.Tag.GetType(); if (tagType == typeof(Azure.Asm.VirtualNetwork)) { Azure.Asm.VirtualNetwork asmVirtualNetwork = (Azure.Asm.VirtualNetwork)asmTreeNode.Tag; TreeNode virtualNetworksNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Virtual Networks", "Virtual Networks", "Virtual Networks", true); TreeNode virtualNetworkNode = SeekARMChildTreeNode(virtualNetworksNode.Nodes, asmTreeNode.Name, asmVirtualNetwork.GetFinalTargetName(), asmTreeNode, true); foreach (Azure.Asm.Subnet asmSubnet in asmVirtualNetwork.Subnets) { // Property dialog not made available for Gateway Subnet if (!asmSubnet.IsGatewaySubnet) { TreeNode subnetNode = SeekARMChildTreeNode(virtualNetworkNode.Nodes, asmSubnet.Name, asmSubnet.Name, asmSubnet, true); } } targetResourceGroupNode.ExpandAll(); return(virtualNetworkNode); } else if (tagType == typeof(Azure.Asm.StorageAccount)) { Azure.Asm.StorageAccount asmStorageAccount = (Azure.Asm.StorageAccount)asmTreeNode.Tag; TreeNode storageAccountsNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Storage Accounts", "Storage Accounts", "Storage Accounts", true); TreeNode storageAccountNode = SeekARMChildTreeNode(storageAccountsNode.Nodes, asmTreeNode.Name, asmStorageAccount.GetFinalTargetName(), asmTreeNode, true); targetResourceGroupNode.ExpandAll(); return(storageAccountNode); } else if (tagType == typeof(Azure.Asm.VirtualMachine)) { Azure.Asm.VirtualMachine asmVirtualMachine = (Azure.Asm.VirtualMachine)asmTreeNode.Tag; TreeNode availabilitySets = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Availability Sets", "Availability Sets", "Availability Sets", true); TreeNode availabilitySet = SeekARMChildTreeNode(availabilitySets.Nodes, asmVirtualMachine.TargetAvailabilitySet.TargetName, asmVirtualMachine.TargetAvailabilitySet.GetFinalTargetName(), asmVirtualMachine.TargetAvailabilitySet, true); TreeNode virtualMachineNode = SeekARMChildTreeNode(availabilitySet.Nodes, asmVirtualMachine.RoleName, asmVirtualMachine.RoleName, asmTreeNode, true); foreach (Azure.Asm.Disk asmDataDisk in asmVirtualMachine.DataDisks) { TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, asmDataDisk.DiskName, asmDataDisk.DiskName, asmDataDisk, true); } foreach (Azure.Asm.NetworkInterface asmNetworkInterface in asmVirtualMachine.NetworkInterfaces) { TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, asmNetworkInterface.Name, asmNetworkInterface.Name, asmNetworkInterface, true); } targetResourceGroupNode.ExpandAll(); return(virtualMachineNode); } else if (tagType == typeof(Azure.Asm.NetworkSecurityGroup)) { Azure.Asm.NetworkSecurityGroup asmNetworkSecurityGroup = (Azure.Asm.NetworkSecurityGroup)asmTreeNode.Tag; TreeNode networkSecurityGroups = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Network Security Groups", "Network Security Groups", "Network Security Groups", true); TreeNode networkSecurityGroupNode = SeekARMChildTreeNode(networkSecurityGroups.Nodes, asmNetworkSecurityGroup.Name, asmNetworkSecurityGroup.Name, asmTreeNode, true); targetResourceGroupNode.ExpandAll(); return(networkSecurityGroupNode); } else if (tagType == typeof(Azure.Arm.VirtualNetwork)) { Azure.Arm.VirtualNetwork armVirtualNetwork = (Azure.Arm.VirtualNetwork)asmTreeNode.Tag; TreeNode virtualNetworksNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Virtual Networks", "Virtual Networks", "Virtual Networks", true); TreeNode virtualNetworkNode = SeekARMChildTreeNode(virtualNetworksNode.Nodes, asmTreeNode.Name, armVirtualNetwork.GetFinalTargetName(), asmTreeNode, true); foreach (Azure.Arm.Subnet armSubnet in armVirtualNetwork.Subnets) { // Property dialog not made available for Gateway Subnet if (!armSubnet.IsGatewaySubnet) { TreeNode subnetNode = SeekARMChildTreeNode(virtualNetworkNode.Nodes, armSubnet.Name, armSubnet.Name, armSubnet, true); } } targetResourceGroupNode.ExpandAll(); return(virtualNetworkNode); } else if (tagType == typeof(Azure.Arm.StorageAccount)) { Azure.Arm.StorageAccount armStorageAccount = (Azure.Arm.StorageAccount)asmTreeNode.Tag; TreeNode storageAccountsNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Storage Accounts", "Storage Accounts", "Storage Accounts", true); TreeNode storageAccountNode = SeekARMChildTreeNode(storageAccountsNode.Nodes, asmTreeNode.Name, armStorageAccount.GetFinalTargetName(), asmTreeNode, true); targetResourceGroupNode.ExpandAll(); return(storageAccountNode); } else if (tagType == typeof(Azure.Arm.VirtualMachine)) { Azure.Arm.VirtualMachine armVirtualMachine = (Azure.Arm.VirtualMachine)asmTreeNode.Tag; TreeNode virtualMachineNode = null; if (armVirtualMachine.TargetAvailabilitySet != null) { TreeNode availabilitySets = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Availability Sets", "Availability Sets", "Availability Sets", true); TreeNode availabilitySet = SeekARMChildTreeNode(availabilitySets.Nodes, armVirtualMachine.TargetAvailabilitySet.TargetName, armVirtualMachine.TargetAvailabilitySet.GetFinalTargetName(), armVirtualMachine.TargetAvailabilitySet, true); virtualMachineNode = SeekARMChildTreeNode(availabilitySet.Nodes, armVirtualMachine.Name, armVirtualMachine.Name, asmTreeNode, true); } else { virtualMachineNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, armVirtualMachine.Name, armVirtualMachine.Name, asmTreeNode, true); } foreach (Azure.Arm.Disk armDataDisk in armVirtualMachine.DataDisks) { TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, armDataDisk.Name, armDataDisk.Name, armDataDisk, true); } foreach (Azure.Arm.NetworkInterfaceCard asmNetworkInterface in armVirtualMachine.NetworkInterfaces) { TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, asmNetworkInterface.Name, asmNetworkInterface.Name, asmNetworkInterface, true); } targetResourceGroupNode.ExpandAll(); return(virtualMachineNode); } else if (tagType == typeof(Azure.Arm.NetworkSecurityGroup)) { Azure.Arm.NetworkSecurityGroup armNetworkSecurityGroup = (Azure.Arm.NetworkSecurityGroup)asmTreeNode.Tag; TreeNode networkSecurityGroups = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, "Network Security Groups", "Network Security Groups", "Network Security Groups", true); TreeNode networkSecurityGroupNode = SeekARMChildTreeNode(networkSecurityGroups.Nodes, armNetworkSecurityGroup.Name, armNetworkSecurityGroup.Name, asmTreeNode, true); targetResourceGroupNode.ExpandAll(); return(networkSecurityGroupNode); } else { throw new Exception("Unhandled Node Type in AddASMNodeToARMTree: " + tagType); } }
private async void treeARM_AfterSelect(object sender, TreeViewEventArgs e) { LogProvider.WriteLog("treeARM_AfterSelect", "Start"); _SourceArmNode = e.Node; _PropertyPanel.Clear(); _PropertyPanel.ResourceText = String.Empty; if (e.Node.Tag != null) { if (e.Node.Tag.GetType() == typeof(TreeNode)) { TreeNode asmTreeNode = (TreeNode)e.Node.Tag; if (asmTreeNode.Tag != null) { _PropertyPanel.ResourceText = e.Node.Text; if (asmTreeNode.Tag.GetType() == typeof(Azure.Asm.VirtualNetwork)) { this._PropertyPanel.ResourceImage = imageList1.Images["VirtualNetwork"]; VirtualNetworkProperties properties = new VirtualNetworkProperties(); properties.PropertyChanged += Properties_PropertyChanged; properties.Bind(e.Node); _PropertyPanel.PropertyDetailControl = properties; } else if (asmTreeNode.Tag.GetType() == typeof(Azure.Asm.StorageAccount)) { this._PropertyPanel.ResourceImage = imageList1.Images["StorageAccount"]; Azure.Asm.StorageAccount storageAccount = (Azure.Asm.StorageAccount)asmTreeNode.Tag; _PropertyPanel.ResourceText = storageAccount.Name; StorageAccountProperties properties = new StorageAccountProperties(); properties.PropertyChanged += Properties_PropertyChanged; properties.Bind(this._AzureContextTargetARM, e.Node); _PropertyPanel.PropertyDetailControl = properties; } else if (asmTreeNode.Tag.GetType() == typeof(Azure.Asm.VirtualMachine)) { this._PropertyPanel.ResourceImage = imageList1.Images["VirtualMachine"]; VirtualMachineProperties properties = new VirtualMachineProperties(this.LogProvider); properties.AllowManangedDisk = (await _AzureContextSourceASM.AzureRetriever.GetAzureARMManagedDisks() != null); properties.PropertyChanged += Properties_PropertyChanged; await properties.Bind(e.Node, this); _PropertyPanel.PropertyDetailControl = properties; } else if (asmTreeNode.Tag.GetType() == typeof(Azure.Asm.NetworkSecurityGroup)) { this._PropertyPanel.ResourceImage = imageList1.Images["NetworkSecurityGroup"]; NetworkSecurityGroupProperties properties = new NetworkSecurityGroupProperties(); properties.PropertyChanged += Properties_PropertyChanged; properties.Bind(e.Node, this); _PropertyPanel.PropertyDetailControl = properties; } } } if (e.Node.Tag.GetType() == typeof(Azure.Asm.Subnet)) { this._PropertyPanel.ResourceImage = imageList1.Images["VirtualNetwork"]; Azure.Asm.Subnet asmSubnet = (Azure.Asm.Subnet)e.Node.Tag; SubnetProperties properties = new SubnetProperties(); properties.PropertyChanged += Properties_PropertyChanged; properties.Bind(e.Node); _PropertyPanel.PropertyDetailControl = properties; } else if (e.Node.Tag.GetType() == typeof(Azure.Asm.Disk)) { Azure.Asm.Disk asmDisk = (Azure.Asm.Disk)e.Node.Tag; this._PropertyPanel.ResourceImage = imageList1.Images["Disk"]; DiskProperties properties = new DiskProperties(this.LogProvider); properties.AllowManangedDisk = (await _AzureContextSourceASM.AzureRetriever.GetAzureARMManagedDisks() != null); properties.PropertyChanged += Properties_PropertyChanged; properties.Bind(this, e.Node); _PropertyPanel.PropertyDetailControl = properties; } else if (e.Node.Tag.GetType() == typeof(AvailabilitySet)) { this._PropertyPanel.ResourceImage = imageList1.Images["AvailabilitySet"]; AvailabilitySetProperties properties = new AvailabilitySetProperties(); properties.PropertyChanged += Properties_PropertyChanged; properties.Bind(e.Node); _PropertyPanel.PropertyDetailControl = properties; } else if (e.Node.Tag.GetType() == typeof(ResourceGroup)) { this._PropertyPanel.ResourceImage = imageList1.Images["ResourceGroup"]; ResourceGroupProperties properties = new ResourceGroupProperties(); properties.PropertyChanged += Properties_PropertyChanged; await properties.Bind(this, e.Node); _PropertyPanel.PropertyDetailControl = properties; } } _SourceArmNode = null; LogProvider.WriteLog("treeARM_AfterSelect", "End"); StatusProvider.UpdateStatus("Ready"); }