Hi - I'm new to this SDK and C#. I'm trying to code a dockpane which lists all rasters of a given folder. this works. now I would like to add the listed rasters with drag&drop (or right-click - add) to the current map. unfortunately I don't get it to work. it doesn't throw any errors, so I have no clue what's missing... can someone help me please?
here my xaml:
<ListView Name="FileListView" SelectionChanged="FileListView_SelectionChanged" AllowDrop="True" Drop="FileListView_Drop" Height="Auto" Margin="0,28,0,113" Grid.Row="1">
<ListView.View>
<GridView>
<GridViewColumn Header="Filename" Width="250">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Button Content="Refresh" Click="OnRefreshButtonClicked" HorizontalAlignment="Left" Margin="0,3,0,0" Grid.Row="1" VerticalAlignment="Top"/>
here my xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.IO;
using ArcGIS.Desktop.Framework;
using ArcGIS.Desktop.Framework.Contracts;
namespace dockpane_parcs
{
/// <summary>
/// Interaction logic for Dockpane1View.xaml
/// </summary>
public partial class Dockpane1View : UserControl
{
private ObservableCollection<string> fileNames;
public Dockpane1View()
{
InitializeComponent();
fileNames = new ObservableCollection<string>();
FileListView.ItemsSource = fileNames;
FileListView.Drop += FileListView_Drop;
}
private void OnRefreshButtonClicked(object sender, RoutedEventArgs e)
{
// Define the list of allowed file extensions
string[] allowedExtensions = { ".tif", ".TIF", ".tiff", ".TIFF" };
// Update the list of files in a folder
string folderPath = @"C:\XXXX\YYYYY"; // Replace with your folder path
try
{
// Get a list of files with the allowed extensions from the folder
var files = Directory.GetFiles(folderPath)
.Where(file => allowedExtensions.Contains(System.IO.Path.GetExtension(file)))
.ToList();
fileNames.Clear();
foreach (string file in files)
{
fileNames.Add(System.IO.Path.GetFileName(file));
}
}
catch (Exception ex)
{
MessageBox.Show($"Error: {ex.Message}");
}
}
private void FileListView_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
// Get the dropped files as an array of strings
string[] droppedFiles = (string[])e.Data.GetData(DataFormats.FileDrop);
// Filter for allowed file extensions
string[] allowedExtensions = { ".tif", ".TIF", ".tiff", ".TIFF" };
var validFiles = droppedFiles.Where(file => allowedExtensions.Contains(System.IO.Path.GetExtension(file)));
// Add the valid files to the ObservableCollection
foreach (string file in validFiles)
{
fileNames.Add(System.IO.Path.GetFileName(file));
}
}
}
private void FileListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
}
}