diff --git a/SharepointToolbox/ViewModels/Tabs/PermissionsViewModel.cs b/SharepointToolbox/ViewModels/Tabs/PermissionsViewModel.cs index 7d2bc30..0f42775 100644 --- a/SharepointToolbox/ViewModels/Tabs/PermissionsViewModel.cs +++ b/SharepointToolbox/ViewModels/Tabs/PermissionsViewModel.cs @@ -75,6 +75,12 @@ public partial class PermissionsViewModel : FeatureViewModelBase public ObservableCollection SelectedSites { get; } = new(); + /// + /// True when the user has manually selected sites via the site picker on this tab. + /// Prevents global site changes from overwriting the user's local selection. + /// + private bool _hasLocalSiteOverride; + // ── Dialog factory (set by View layer — keeps Window out of ViewModel) ── /// @@ -152,6 +158,15 @@ public partial class PermissionsViewModel : FeatureViewModelBase // ── FeatureViewModelBase implementation ───────────────────────────────── + protected override void OnGlobalSitesChanged(IReadOnlyList sites) + { + if (_hasLocalSiteOverride) return; + + SelectedSites.Clear(); + foreach (var site in sites) + SelectedSites.Add(site); + } + protected override async Task RunOperationAsync(CancellationToken ct, IProgress progress) { var urls = SelectedSites.Count > 0 @@ -214,6 +229,7 @@ public partial class PermissionsViewModel : FeatureViewModelBase protected override void OnTenantSwitched(TenantProfile profile) { _currentProfile = profile; + _hasLocalSiteOverride = false; Results = new ObservableCollection(); SiteUrl = string.Empty; SelectedSites.Clear(); @@ -288,6 +304,7 @@ public partial class PermissionsViewModel : FeatureViewModelBase var dialog = OpenSitePickerDialog.Invoke(); if (dialog?.ShowDialog() == true && dialog is Views.Dialogs.SitePickerDialog picker) { + _hasLocalSiteOverride = true; SelectedSites.Clear(); foreach (var site in picker.SelectedUrls) SelectedSites.Add(site);