private async Task HandleDropAsync(DragEventArgs e) { // thanks to https://stackoverflow.com/a/21707156/2023653 var files = (string[])e.Data.GetData(DataFormats.FileDrop); var resolvedFiles = ResolveFileList(files).ToArray(); //string basePath = resolvedFiles.First() DropStarted?.Invoke(resolvedFiles); int done = 0; var percentComplete = 0d; foreach (var file in resolvedFiles) { done++; percentComplete = done / (double)resolvedFiles.Length; try { var item = await FileHandling?.Invoke(new FileHandlingEventArgs(file, "oops", percentComplete)); if (item != null) { ListView.Items.Add(item); } } catch { } } DropCompleted?.Invoke(this, new EventArgs()); }
public void SendDropCompleted(DropCompletedEventArgs args) { if (!_isDragActive) { // this is mainly relevant for Android // Android fires an Ended action on every single view that has a drop handler // but we only need one of those DropCompleted actions to make it through return; } _isDragActive = false; _ = args ?? throw new ArgumentNullException(nameof(args)); DropCompletedCommand?.Execute(DropCompletedCommandParameter); DropCompleted?.Invoke(this, args); }