ReactiveListおよびItemsAddedプロパティについて。ReactiveLIst ItemsAdded
public ReactiveList<account.JournalViewModel> JournalEntries { get; private set; }
そして、私はすべてのジャーナル項目のバランスを表示するためのReadOnlyプロパティを持っている:私はReactiveListに格納されたジャーナル項目のリストを持っていた
readonly ObservableAsPropertyHelper<decimal> _balance;
public decimal Balance { get { return _balance.Value; } }
のViewModelのコンストラクタで、私はReactiveListをインスタンス化し、ObservableAsPropertyHelper設定:次に
this.JournalEntries = new ReactiveList<account.JournalViewModel>();
this.JournalEntries.ChangeTrackingEnabled = true;
this.WhenAnyObservable(vm => vm.JournalEntries.ItemsAdded)
.Select(_ => this.JournalEntries.Sum(j => j.CreditAmount) - this.JournalEntries.Sum(j => j.DebitAmount))
.ToProperty(this, vm => vm.Balance, out _balance);
を、まだコンストラクタではなく、さらにダウン、私はReactiveListに項目を追加します。
foreach (var j in journalEntries)
this.JournalEntries.Add(new account.JournalViewModel(j, this));
しかし、これはBalanceプロパティを設定しないため、理由はわかりません。
decimal _balance;
public decimal Balance { get { return _balance; } set { this.RaiseAndSetIfChanged(ref _balance, value); } }
そして、コンストラクタで、ItemsAdded観測登録::私は定期的に老いた観察可能にプロパティを変更する場合は
this.WhenAnyObservable(vm => vm.JournalEntries.ItemsAdded)
.Subscribe(_ => this.Balance = this.JournalEntries.Sum(j => j.CreditAmount) - this.JournalEntries.Sum(j => j.DebitAmount));
私はジャーナル項目を追加すると、所望の結果があります達成された。最初の方法がうまくいかない理由について私が尋ねるより熟練した人が欲しいと願っていました。私が気付いていないようにする方法はありますか?
おかげで、あなたは正確に正しかった、それは怠惰な契約が原因でした問題。あなたのメソッドを試しましたが、それでも変数はロードされませんでしたが、ToPropertyコールの後で、すべてのジャーナルアイテムをロードする前にプロパティ 'Balance'を呼び出すと、期待どおりに実行されました。あなたはプロパティ呼び出しをしなくてもいい方法を考えていますか?この時点で本当に好奇心が強い。リスニングを開始する以外の理由がなくても、プロパティを呼び出す必要があるようなハックのようなものです。 –
私は非常に基本的なアプリで自分のメソッドを試してから、いくつかの項目を追加してから、「残高」をチェックして合計が正しいとしました。あなたは 'StartWith'を含んでいますか? –