diff --git a/src/modules/Hosts/Hosts/ViewModels/MainViewModel.cs b/src/modules/Hosts/Hosts/ViewModels/MainViewModel.cs index 23bd229890..bb4754c0b5 100644 --- a/src/modules/Hosts/Hosts/ViewModels/MainViewModel.cs +++ b/src/modules/Hosts/Hosts/ViewModels/MainViewModel.cs @@ -52,6 +52,9 @@ namespace Hosts.ViewModels [ObservableProperty] private string _additionalLines; + [ObservableProperty] + private bool _isLoading; + private ObservableCollection _entries; public ObservableCollection Entries => _filtered || _showOnlyDuplicates ? GetFilteredEntries() : _entries; @@ -125,6 +128,7 @@ namespace Hosts.ViewModels public void ReadHosts() { FileChanged = false; + IsLoading = true; Task.Run(async () => { @@ -141,8 +145,10 @@ namespace Hosts.ViewModels _entries.CollectionChanged += Entries_CollectionChanged; OnPropertyChanged(nameof(Entries)); - FindDuplicates(); + IsLoading = false; }); + + FindDuplicates(); }); } @@ -243,10 +249,12 @@ namespace Hosts.ViewModels { var hosts = entry.SplittedHosts; - entry.Duplicate = _entries.FirstOrDefault(e => + var duplicate = _entries.FirstOrDefault(e => e != entry && (string.Equals(e.Address, entry.Address, StringComparison.InvariantCultureIgnoreCase) || hosts.Intersect(e.SplittedHosts, StringComparer.InvariantCultureIgnoreCase).Any())) != null; + + _dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, () => entry.Duplicate = duplicate); } private ObservableCollection GetFilteredEntries() diff --git a/src/modules/Hosts/Hosts/Views/MainPage.xaml b/src/modules/Hosts/Hosts/Views/MainPage.xaml index 85aaabaa68..566af4feb5 100644 --- a/src/modules/Hosts/Hosts/Views/MainPage.xaml +++ b/src/modules/Hosts/Hosts/Views/MainPage.xaml @@ -26,6 +26,10 @@ NotEmptyValue="Visible" /> + @@ -194,7 +198,8 @@ IsItemClickEnabled="True" ItemClick="Entries_ItemClick" ItemsSource="{Binding Entries, Mode=TwoWay}" - SelectedItem="{Binding Selected, Mode=TwoWay}"> + SelectedItem="{Binding Selected, Mode=TwoWay}" + Visibility="{x:Bind ViewModel.IsLoading, Converter={StaticResource BoolToInvertedVisibilityConverter}, Mode=OneWay}"> + +