Sortable.Avalonia
2.2.0
dotnet add package Sortable.Avalonia --version 2.2.0
NuGet\Install-Package Sortable.Avalonia -Version 2.2.0
<PackageReference Include="Sortable.Avalonia" Version="2.2.0" />
<PackageVersion Include="Sortable.Avalonia" Version="2.2.0" />
<PackageReference Include="Sortable.Avalonia" />
paket add Sortable.Avalonia --version 2.2.0
#r "nuget: Sortable.Avalonia, 2.2.0"
#:package Sortable.Avalonia@2.2.0
#addin nuget:?package=Sortable.Avalonia&version=2.2.0
#tool nuget:?package=Sortable.Avalonia&version=2.2.0
Sortable.Avalonia
An attached-behavior library that adds drag-and-drop sorting, cross-collection transfers, and animated item movements to any Avalonia ItemsControl — all with full MVVM support and no code-behind.
Changes in Version 2.2.0
- Package now targets NET 8.0 and NET 10.0 and now requires Avalonia 12.0+. Update your project references accordingly.
Changes in Version 2.0.0
- Breaking change:
AnimationDurationnow usesTimeSpaninstead ofint(milliseconds). Update your XAML and code to use TimeSpan format (e.g.,0:0:0.500).- New feature: Release behavior with
ReleaseCommandandSortableReleaseEventArgsfor handling items released outside valid drop targets.
Key Features
✅ Same-collection sorting – Reorder items within a list
✅ Cross-collection transfers – Move/copy/swap items between lists
✅ Reversible drops – Accept/reject drops in your ViewModel before commit
✅ Transfer modes – Move, Copy, or Swap
✅ Sortable modes – Sort (shift) or Swap (exchange)
✅ Drag handles – Restrict drag start to specific controls
✅ Smooth animations – For both interactive and programmatic changes
✅ Groups – Isolate interactions by group name
✅ Touch + Mouse – Unified pointer input
Quick Example
<ItemsControl xmlns:sortable="clr-namespace:Sortable.Avalonia;assembly=Sortable.Avalonia"
sortable:Sortable.Sortable="True"
sortable:Sortable.UpdateCommand="{Binding UpdateCmd}"
ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border sortable:Sortable.IsSortable="True" Cursor="Hand">
<TextBlock Text="{Binding Name}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
[RelayCommand]
void Update(SortableUpdateEventArgs e)
{
if (e.ApplyUpdateMutation())
{
Console.WriteLine($"Moved from {e.OldIndex} to {e.NewIndex}");
}
}
Installation
dotnet add package Sortable.Avalonia
Why Use This?
- Zero code-behind – Pure XAML + ViewModel commands
- Works with any panel –
StackPanel,UniformGrid,WrapPanel, etc. - Conditional acceptance – Validate business rules before applying mutations
- Helper extensions –
ApplyUpdateMutation()andApplyDropMutation()handle collection changes for you
Common Scenarios
| Use Case | Description |
|---|---|
| Kanban board | Drag tasks between columns (Triage → Engineering → Release) |
| Priority queue | Reorder items by drag-and-drop |
| Drag handles | Only drag from specific icons, keep buttons clickable |
| Copy mode | Duplicate templates instead of moving them |
| Swap mode | Exchange positions without shifting other items |
| Cross-collection swap | Trade items between two lists in one gesture |
Visit the repository for the full documentation
📖 Sortable.Avalonia Repo - Full Documentation & Interactive Demos
The repository includes:
- Detailed property reference
- 18 runnable demo scenarios (Kanban, grid layouts, drag handles, etc.)
- Advanced patterns (conditional acceptance, copy mode, groups)
- Animation control and customization guide
License
MIT License – See LICENSE for details.
Need help? Open an issue or check out the demo app for working examples.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Migrate to Avalonia 12.0 base