protected WalletViewModel(UiConfig uiConfig, Wallet wallet) : base(wallet) { Disposables = Disposables is null ? new CompositeDisposable() : throw new NotSupportedException($"Cannot open {GetType().Name} before closing it."); Observable.Merge( Observable.FromEventPattern(Wallet.TransactionProcessor, nameof(Wallet.TransactionProcessor.WalletRelevantTransactionProcessed)).Select(_ => Unit.Default)) .Throttle(TimeSpan.FromSeconds(0.1)) .Merge(uiConfig.WhenAnyValue(x => x.PrivacyMode).Select(_ => Unit.Default)) .Merge(Wallet.Synchronizer.WhenAnyValue(x => x.UsdExchangeRate).Select(_ => Unit.Default)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe( _ => { try { var balance = Wallet.Coins.TotalAmount(); Title = $"{WalletName} ({(uiConfig.PrivacyMode ? "#########" : balance.ToString(false))} BTC)"; TitleTip = balance.ToUsdString(Wallet.Synchronizer.UsdExchangeRate, uiConfig.PrivacyMode); } catch (Exception ex) { Logger.LogError(ex); } }) .DisposeWith(Disposables); History = new HistoryViewModel(wallet, uiConfig); BalanceTile = new WalletBalanceTileViewModel(wallet); WalletPieChart = new WalletPieChartTileViewModel(wallet); }
protected WalletViewModel(UiConfig uiConfig, Wallet wallet) : base(wallet) { Disposables = Disposables is null ? new CompositeDisposable() : throw new NotSupportedException($"Cannot open {GetType().Name} before closing it."); var balanceChanged = Observable.FromEventPattern(Wallet.TransactionProcessor, nameof(Wallet.TransactionProcessor.WalletRelevantTransactionProcessed)).Select(_ => Unit.Default) .Throttle(TimeSpan.FromSeconds(0.1)) .Merge(Observable.FromEventPattern(Wallet, nameof(Wallet.NewFilterProcessed)).Select(_ => Unit.Default)) .Merge(uiConfig.WhenAnyValue(x => x.PrivacyMode).Select(_ => Unit.Default)) .Merge(Wallet.Synchronizer.WhenAnyValue(x => x.UsdExchangeRate).Select(_ => Unit.Default)) .ObserveOn(RxApp.MainThreadScheduler); History = new HistoryViewModel(wallet, uiConfig, balanceChanged); BalanceTile = new WalletBalanceTileViewModel(wallet, balanceChanged); BalanceChartTile = new WalletBalanceChartTileViewModel(History.Transactions); WalletPieChart = new WalletPieChartTileViewModel(wallet, balanceChanged); }