WhenAny 和 ToProperty
WhenAny and ToProperty
我想我缺少一个基本的 Observable 概念。
我有一个 ChargeViewModel class,它有一个 ReactiveList 属性,它本身就是一个集合
ChargeViewModel.Charges 其中包含相关费用
我想查看收费集合中的最新条目(它有一个 ChargeViewModel.lastModified),并且 UI 中还有基于最新条目的其他属性。
在构造函数中,我有这段代码可以用来初始化值;但是,当可观察变量 "last" 更改
时,它不会更新 latestActionDate、latestBillToName、latestNote 的值
我希望 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
(默认情况下)仅通知元素 added/moved/removed,而不通知内容更改。通过设置 ChangeTrackingEnabled=true
.
来启用它(也许你已经这样做了)相当简单
然而,启用后,您将在 ItemChanged
observable 上收到此类主题,而不是在 Changed
上收到,因此在您的情况下,您可能需要这样做:
Charges.Changed.Select(_ => Unit.Default).Merge(Charges.ItemChanged.Select(_ => Unit.Default))
.Select(_ => /* ... */)
....
我想我缺少一个基本的 Observable 概念。
我有一个 ChargeViewModel class,它有一个 ReactiveList 属性,它本身就是一个集合 ChargeViewModel.Charges 其中包含相关费用
我想查看收费集合中的最新条目(它有一个 ChargeViewModel.lastModified),并且 UI 中还有基于最新条目的其他属性。
在构造函数中,我有这段代码可以用来初始化值;但是,当可观察变量 "last" 更改
时,它不会更新 latestActionDate、latestBillToName、latestNote 的值我希望 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
(默认情况下)仅通知元素 added/moved/removed,而不通知内容更改。通过设置 ChangeTrackingEnabled=true
.
然而,启用后,您将在 ItemChanged
observable 上收到此类主题,而不是在 Changed
上收到,因此在您的情况下,您可能需要这样做:
Charges.Changed.Select(_ => Unit.Default).Merge(Charges.ItemChanged.Select(_ => Unit.Default))
.Select(_ => /* ... */)
....