WhenAny and ToProperty

本文关键字:ToProperty and WhenAny | 更新日期: 2023-09-27 18:17:10

我想我错过了一个基本的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);

WhenAny and ToProperty

ReactiveList(默认情况下)只通知添加/移动/删除元素,而不通知内容更改。通过设置ChangeTrackingEnabled=true来启用它非常简单(也许您已经这样做了)。

然而,当启用时,您将收到ItemChanged可观察到的这样的动机,而不是Changed一个,所以在您的情况下,您可能需要做:

Charges.Changed.Select(_ => Unit.Default).Merge(Charges.ItemChanged.Select(_ => Unit.Default))
    .Select(_ => /* ... */)
    ....