我想我错过了一个基本的Observable概念。
我有一个ChargeViewModel类,它有一个ReactiveList属性,它是它自己的集合 ChargeViewModel.Charges包含相关费用
我想观察费用集合中的最新条目(它有一个ChargeViewModel.lastModified),并且在UI中还有基于最新条目的其他属性。
在ctor中我有这个代码用于初始化值;但是当可观察变量" last"时,它不会更新latestActionDate,latestBillToName,lastestNote的值。变化
如果用户更新" 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);
答案 0 :(得分:2)
ReactiveList
(默认情况下)仅通知添加/移动/删除的元素,而不会更改内容。通过设置ChangeTrackingEnabled=true
可以相当简单地启用它(也许你已经这样做了。)
但是,启用后,您会在ItemChanged
可观察的,而不是Changed
上收到此类动机,所以在您的情况下您可能需要这样做:
Charges.Changed.Select(_ => Unit.Default).Merge(Charges.ItemChanged.Select(_ => Unit.Default))
.Select(_ => /* ... */)
....