我想我错过了一个基本的Observable概念。
我有一个ChargeViewModel类,它有一个ReactiveList属性,它是自己的集合ChargeViewModel。包含相关费用的费用
我想观察收费集合中的最新条目(它有一个ChargeViewModel.lastModified),并且在UI中也有基于最新条目的其他属性。
在函数中,我有这段代码,用于初始化值;但是,当可观察变量"last"发生变化时,它不会更新latestActionDate、latestBillToName和laststnote的值
我希望UI在用户更新"last"收费或创建新的"last"收费时进行更新。
var last = Charges?
.Changed
.Select(_ => Charges.OrderByDescending(c => c.Model.LastModified).FirstOrDefault())
.StartWith(Charges.OrderByDescending(c =>c.Model.LastModified).FirstOrDefault());
last
.Select(c => c.Model.LastModified)
.ToProperty(this, vm => vm.LatestActionDate, out latestActionDate);
last
.Select(c => c.Model.BillToName)
.ToProperty(this, vm => vm.LatestBillToName, out latestBillToName);
last
.Select(c => c.Model.Note)
.ToProperty(this, vm => vm.LatestNote, out latestNote);
ReactiveList
(默认情况下)只通知添加/移动/删除元素,而不通知内容更改。通过设置ChangeTrackingEnabled=true
来启用它非常简单(也许您已经这样做了)。
然而,当启用时,您将收到ItemChanged
可观察到的这样的动机,而不是Changed
一个,所以在您的情况下,您可能需要做:
Charges.Changed.Select(_ => Unit.Default).Merge(Charges.ItemChanged.Select(_ => Unit.Default))
.Select(_ => /* ... */)
....