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; } }
/// <summary> /// 将Boi列表转换为Node列表 /// </summary> /// <param name="BoiList"></param> /// <returns></returns> private List <ContractBoiNode> Convert(List <ContractBoi> BoiList) { List <ContractBoiNode> lstBoiNode; List <ContractBoiNode> lstRoot; lstBoiNode = BoiList.ConvertAll <ContractBoiNode>(m => { ContractBoiNode node = HDAutoMapper.DynamicMap <ContractBoiNode>(m); node.OriginalBoi = m; return(node); }); lstRoot = lstBoiNode.FindAll(m => String.IsNullOrEmpty(m.ParentCode)); RootList.AddRange(lstRoot); lstRoot.ForEach(m => { RecursionNode(lstBoiNode, m); }); return(lstBoiNode); }
/// <summary> /// 将Boi列表转换为Node列表 /// </summary> /// <param name="BoiList"></param> /// <returns></returns> private List <ContractBoiChangeNode> Convert(List <ContractBoi> BoiList) { List <ContractBoiChangeNode> lstBoiNode; List <ContractBoiChangeNode> lstRoot; lstBoiNode = BoiList.ConvertAll <ContractBoiChangeNode>(m => { ContractBoiChangeNode node = HDAutoMapper.DynamicMap <ContractBoiChangeNode>(m); //生成变更的编辑界面使用合同字段作为最新的值,因此 将变更后的值赋值给合同字段 node.CtrctAmount = node.LatestAmount; node.CtrctPrjPrice = node.LatestPrice; node.CtrctQty = node.LatestQty; node.OriginalBoi = m; return(node); }); lstRoot = lstBoiNode.FindAll(m => String.IsNullOrEmpty(m.ParentCode)); RootList.AddRange(lstRoot); lstRoot.ForEach(m => { RecursionNode(lstBoiNode, m); }); return(lstBoiNode); }
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; } }