private void UpdateRootList() { try { var actual = _walletManager.CurrentWallet.TransactionProcessor?.Coins?.ToHashSet() ?? Enumerable.Empty <SmartCoin>(); var old = RootList.Items.ToDictionary(c => c.Model, c => c); var coinToRemove = old.Where(c => !actual.Contains(c.Key)).ToArray(); var coinToAdd = actual.Where(c => !old.ContainsKey(c)).ToArray(); RootList.RemoveMany(coinToRemove.Select(kp => kp.Value)); var newCoinViewModels = coinToAdd.Select(c => new CoinViewModel(_walletManager, _config, _bitcoinStore, c)).ToArray(); foreach (var cvm in newCoinViewModels) { SubscribeToCoinEvents(cvm); } RootList.AddRange(newCoinViewModels); foreach (var item in coinToRemove) { item.Value.Dispose(); } } catch (Exception ex) { Logger.LogError(ex); } finally { IsCoinListLoading = false; } }
private void UpdateRootList() { try { var actual = Global.Wallet.TransactionProcessor.Coins.ToHashSet(); var old = RootList.Items.ToDictionary(c => c.Model, c => c); var coinToRemove = old.Where(c => !actual.Contains(c.Key)).ToArray(); var coinToAdd = actual.Where(c => !old.ContainsKey(c)).ToArray(); RootList.RemoveMany(coinToRemove.Select(kp => kp.Value)); var newCoinViewModels = coinToAdd.Select(c => new CoinViewModel(this, c)).ToArray(); foreach (var cvm in newCoinViewModels) { SubscribeToCoinEvents(cvm); } RootList.AddRange(newCoinViewModels); var allCoins = RootList.Items.ToArray(); RefreshSelectionCheckBoxes(allCoins); foreach (var item in coinToRemove) { item.Value.Dispose(); } } catch (Exception ex) { Logger.LogError(ex); } finally { IsCoinListLoading = false; } }