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(_ => /* ... */)
    ....