ReactiveList ve ItemsAdded özelliği ile ilgili. Bir ReactiveList saklanan Dergisi öğelerin bir listesi vardı:ReactiveLIst Öğeleri Değiştirildi
public ReactiveList<account.JournalViewModel> JournalEntries { get; private set; }
Ve bütün Dergisi Öğeler Denge görüntülemek için bir Readonly özelliği vardır: ViewModel arasında Oluşturucu olarak
readonly ObservableAsPropertyHelper<decimal> _balance;
public decimal Balance { get { return _balance.Value; } }
, ben ReactiveList örneğini ve set 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);
Sonra yine yapıcı değil daha aşağı, ben ReactiveList öğe eklemek:
foreach (var j in journalEntries)
this.JournalEntries.Add(new account.JournalViewModel(j, this));
Ancak bu, Balance özelliğini ayarlamaz ve nedenini bilmiyorum. Ben normal gözlemlenebilir ol' için özelliğini değiştirmek Ancak: yapıcı
decimal _balance;
public decimal Balance { get { return _balance; } set { this.RaiseAndSetIfChanged(ref _balance, value); } }
Ve, ItemsAdded gözlemlenebilir abone olun: Ben günlük öğelerini eklediğinizde
this.WhenAnyObservable(vm => vm.JournalEntries.ItemsAdded)
.Subscribe(_ => this.Balance = this.JournalEntries.Sum(j => j.CreditAmount) - this.JournalEntries.Sum(j => j.DebitAmount));
, istenen sonucu elde etti. İlk yöntemin neden işe yaramayacağını anlayabileceğimden daha yetenekli birini umut ediyordum. Bunun farkında olmamak için çalışmanın bir yolu var mı?
sayesinde ve tam olarak doğru olduğunu, bu Tembel Abonelik neden oldu konu. Metodunu denedim, ama yine de değişkeni yüklemiyordu, fakat ToProperty çağrısından sonra 'Balance' özelliğine bir çağrı yaptığımda, ancak tüm Journal Items'ı yüklemeden önce, beklendiği gibi gerçekleştirildi. Mülkiyet çağrısını yapmaktan kaçınmanın bir yolunu düşünebilir misin? Bu noktada gerçekten merak ediyorum. Dinlemeye başlamak için bir sebep olmaksızın mülkiyeti aramak zorunda kalmak gibi bir hack gibi görünüyor. –
Yöntemimi çok basit bir uygulamada denedim, sonra bazı öğeleri ekledim, daha sonra 'Balans'ı işaretledim ve toplam doğruydu. StartWith'i dahil ettiğinize emin misiniz? –