private void LayerTreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { // Get the KML node. LayerDisplayVM selectedItem = (LayerDisplayVM)e.NewValue; NavigateToNode(selectedItem.Node); }
private async void Initialize() { // Add a basemap. MySceneView.Scene = new Scene(Basemap.CreateImageryWithLabels()); MySceneView.Scene.BaseSurface.ElevationSources.Add(new ArcGISTiledElevationSource(new Uri("https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer"))); // Get the URL to the data. Uri kmlUrl = new Uri(DataManager.GetDataFolder("da301cb122874d5497f8a8f6c81eb36e", "esri_test_data.kmz")); // Create the KML dataset and layer. KmlDataset dataset = new KmlDataset(kmlUrl); KmlLayer layer = new KmlLayer(dataset); // Add the layer to the map. MySceneView.Scene.OperationalLayers.Add(layer); await dataset.LoadAsync(); // Build the ViewModel from the expanded list of layer infos. foreach (KmlNode node in dataset.RootNodes) { // LayerDisplayVM is a custom type made for this sample to serve as the ViewModel; it is not a part of ArcGIS Runtime. LayerDisplayVM nodeVm = new LayerDisplayVM(node, null); _viewModelList.Add(nodeVm); LayerDisplayVM.BuildLayerInfoList(nodeVm, _viewModelList); } // Update the list of layers, using the root node from the list. LayerTreeView.ItemsSource = _viewModelList; }
public static void BuildLayerInfoList(LayerDisplayVM root, IList <LayerDisplayVM> result) { // Make the node visible. root.Node.IsVisible = true; // Initialize the child collection for the root. root.Children = new List <LayerDisplayVM>(); // Recursively add children. KmlContainers and KmlNetworkLinks can both have children. var containerNode = root.Node as KmlContainer; var networkLinkNode = root.Node as KmlNetworkLink; List <KmlNode> children = new List <KmlNode>(); if (containerNode != null) { children.AddRange(containerNode.ChildNodes); } if (networkLinkNode != null) { children.AddRange(networkLinkNode.ChildNodes); } foreach (KmlNode node in children) { // Create the view model for the sublayer. LayerDisplayVM layerVm = new LayerDisplayVM(node, root); // Add the sublayer to the root's sublayer collection. root.Children.Add(layerVm); // Recursively add children. BuildLayerInfoList(layerVm, result); } }
public LayerDisplayVM(KmlNode info, LayerDisplayVM parent) { Node = info; Parent = parent; }