我有一个ReactiveObject,其属性“A”的类型为“ReactiveList”。
在我的ViewModel中,我想对列表中每个项目的“T”属性求和。 我得到了它,而“A”没有改变它的价值。
但是当我为“A”分配一个新值时,所有这些都会“不同步”(例如this.A = new ReactiveList();)。
有谁知道如何解决这个问题?我希望我能够清楚地解释我的问题。
答案 0 :(得分:1)
不要直接听A,而是听this
:
this.WhenAnyObservable(x => x.A.ItemsChanged).Subscribe(...);
每当A改变时,你都会重新订阅A.现在,知道何时重置为总和,这有点棘手。这是一种懒惰但更加万无一失的方法:
Observable.Merge(
this.WhenAny(x => x.A, _ => Unit.Default),
this.WhenAnyObservable(x => x.Changed).Select(_ => Unit.Default))
.Select(_ => this.A.Sum(x => x.SomePropOnTheItem))
.DistinctUntilChanged()
.Subscribe(x => Console.WriteLine("Latest sum is {0}", x);
答案 1 :(得分:1)
1 - 我会避免将新集合作为逻辑的一部分连续分配,而是使用Clear()。哪个应该对GC有相同的影响。
2-如果绝对必要,在主要对象A上使用SerialDisposable和subsribe
this.ObservableForProperty(p=> p.A).Subscribe(newAvalue=>{
someSerialDisposable.Disposable=
newAvalue.Changed.Subscribe(_=>this.Result=this.A.Sum(x=>x.T))
});
这会在A个实例上处理以前的深度订阅。