public VpnTrayTabViewModel(VpnProvider vpnProvider, IVpnTrayConfigurationProvider configurationProvider) { _vpnProvider = vpnProvider; _configurationProvider = configurationProvider; Settings = new ObservableCollection <VpnTraySettingsEntryViewModel>(); Icons = new ObservableCollection <VpnTrayIconViewModel>(); vpnProvider.VpnEnumerator.Vpns.Clear(); if (!configurationProvider.Configuration.Entries.TryGetValue(vpnProvider.Name, out var entries)) { configurationProvider.Configuration.Entries[vpnProvider.Name] = entries = new List <VpnTraySettingsEntryConfiguration>(); configurationProvider.Save(); } foreach (var entry in entries) { var vpn = new Vpn(entry.Id, entry.Name); vpnProvider.VpnEnumerator.Vpns.Add(vpn); var vm = new VpnTraySettingsEntryViewModel(vpnProvider.VpnManagerFactory.Create(vpn), entry); vm.PropertyChanged += Entry_PropertyChanged; Settings.Add(vm); if (vm.IsSelected) { Icons.Add(new VpnTrayIconViewModel(vm.VpnManager)); } } vpnProvider.VpnEnumerator.Added += (s, e) => AddManager(e.Vpn); vpnProvider.VpnEnumerator.Removed += (s, e) => RemoveManager(e.Vpn); vpnProvider.VpnEnumerator.RefreshInterval = configurationProvider.Configuration.EnumeratorRefreshInterval; vpnProvider.VpnEnumerator.IsEnabled = true; }
public VpnTrayFormViewModel(VpnProvider[] vpnProviders, IVpnTrayConfigurationProvider configurationProvider) { Tabs = vpnProviders.Select(p => new VpnTrayTabViewModel(p, configurationProvider)).ToArray(); }