@@ -28,6 +28,7 @@ namespace SecureFolderFS.Sdk.ViewModels.Controls.VaultList
2828 public sealed partial class VaultListViewModel : ObservableObject , IAsyncInitialize
2929 {
3030 private readonly IVaultCollectionModel _vaultCollectionModel ;
31+ private bool _ignoreCollectionChanged ;
3132
3233 [ ObservableProperty ] private bool _HasVaults ;
3334 [ ObservableProperty ] private VaultListItemViewModel ? _SelectedItem ;
@@ -63,6 +64,33 @@ public Task InitAsync(CancellationToken cancellationToken = default)
6364 return Task . CompletedTask ;
6465 }
6566
67+ /// <summary>
68+ /// Syncs the order of the vaults with the internal model.
69+ /// </summary>
70+ /// <param name="cancellationToken">A <see cref="CancellationToken"/> that cancels this action.</param>
71+ /// <returns>A <see cref="Task"/> that represents the asynchronous operation.</returns>
72+ public async Task SyncOrderAsync ( CancellationToken cancellationToken = default )
73+ {
74+ try
75+ {
76+ _ignoreCollectionChanged = true ;
77+ foreach ( var item in Items )
78+ {
79+ var currentIndex = _vaultCollectionModel . IndexOf ( item . VaultViewModel . VaultModel ) ;
80+ var targetIndex = Items . IndexOf ( item ) ;
81+
82+ if ( currentIndex != targetIndex )
83+ _vaultCollectionModel . Move ( currentIndex , targetIndex ) ;
84+ }
85+
86+ await _vaultCollectionModel . TrySaveAsync ( cancellationToken ) ;
87+ }
88+ finally
89+ {
90+ _ignoreCollectionChanged = false ;
91+ }
92+ }
93+
6694 [ RelayCommand ( AllowConcurrentExecutions = true ) ]
6795 private async Task AddNewVaultAsync ( IFolder ? folder , CancellationToken cancellationToken )
6896 {
@@ -135,6 +163,9 @@ private void RemoveVault(IVaultModel vaultModel)
135163
136164 private void VaultCollectionModel_CollectionChanged ( object ? sender , NotifyCollectionChangedEventArgs e )
137165 {
166+ if ( _ignoreCollectionChanged )
167+ return ;
168+
138169 switch ( e . Action )
139170 {
140171 case NotifyCollectionChangedAction . Add when e . NewItems is not null && e . NewItems [ 0 ] is IVaultModel vaultModel :
0 commit comments