【发布时间】:2012-06-27 06:55:26
【问题描述】:
我正在使用 ReactiveUI 和提供的 ReactiveCollection<> 类。
在 ViewModel 中,我有一个对象集合,我希望创建一个可观察对象来监视这些项目的 IsValid 属性。
这是我试图解决的场景。在我的 ViewModel 的构造函数中。
this.Items = new ReactiveCollection<object>();
IObservable<bool> someObservable = // ... how do I watch Items so when
// any items IsValid property changes,
// this observable changes. There
// is an IValidItem interface.
this.TheCommand = new ReactiveCommand(someObservable);
...
interface IValidItem { bool IsValid { get; } }
编辑 安娜的回答让我大部分时间都在那里。解决方法如下。
this.Items = new ReactiveCollection<object>();
this.Items.ChangeTrackingEnabled = true;
var someObservable = this.Items.Changed
.Select(_ => this.Items.All(i => i.IsValid));
【问题讨论】:
-
在使用
Changedobservable 时有没有办法避免离开monad?我自己的代码中也有类似的东西,但是不得不忽略序列中的值并退出以获得完整的属性值(this.Items这里)感觉有点笨拙。 :// -
@MalRoss 不确定更改后的 observable 会给您带来什么。如果它在更改时为您提供集合的快照,则可以留在 monad 中,但我怀疑 ReactiveCollection 很懒惰,最多只是返回更改的对象。
标签: system.reactive reactiveui