Sortable.Avalonia
1.0.1
See the version list below for details.
dotnet add package Sortable.Avalonia --version 1.0.1
NuGet\Install-Package Sortable.Avalonia -Version 1.0.1
<PackageReference Include="Sortable.Avalonia" Version="1.0.1" />
<PackageVersion Include="Sortable.Avalonia" Version="1.0.1" />
<PackageReference Include="Sortable.Avalonia" />
paket add Sortable.Avalonia --version 1.0.1
#r "nuget: Sortable.Avalonia, 1.0.1"
#:package Sortable.Avalonia@1.0.1
#addin nuget:?package=Sortable.Avalonia&version=1.0.1
#tool nuget:?package=Sortable.Avalonia&version=1.0.1
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.
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 | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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 was computed. 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. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Avalonia (>= 11.3.12)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Fix decimal separator bug with other cultures by @Enhakiel