ReactiveUI 中的等效项?
Equivalence in ReactiveUI?
我在 ReactiveObject 中有这个 属性 :
bool IsValid => Children.All(child => child.IsValid);
问题是,当然,当 children 被修改时(他们的 "IsValid" 属性),它不会引发任何更改通知。
这在 ReactiveUI 中如何正确完成?
注意:
- Child 也是一个 ReactiveObject。
- 我可以同时修改类、parent
和 children,以满足 RxUI 规则和指南
限制。
ObservableAsPropertyHelper< bool > 是你所需要的,如果你的 Children 属性 是一个反应列表,你可以合并 Changed 和 ItemChanged observables 并且有类似的东西:
public class MyViewModel : ReactiveObject
{
private readonly ObservableAsPropertyHelper<bool> _isValidPropertyHelper;
public MyViewModel()
{
var listChanged = Children.Changed.Select(_ => Unit.Default);
var childrenChanged = Children.ItemChanged.Select(_ => Unit.Default);
_isValidPropertyHelper = listChanged.Merge(childrenChanged)
.Select(_ => Children.All(c => c.IsValid))
.ToProperty(this, model => model.IsValid);
}
public bool IsValid
{
get { return _isValidPropertyHelper.Value; }
}
public ReactiveList<Item> Children { get; set; }
}
我在 ReactiveObject 中有这个 属性 :
bool IsValid => Children.All(child => child.IsValid);
问题是,当然,当 children 被修改时(他们的 "IsValid" 属性),它不会引发任何更改通知。
这在 ReactiveUI 中如何正确完成?
注意:
- Child 也是一个 ReactiveObject。
- 我可以同时修改类、parent 和 children,以满足 RxUI 规则和指南 限制。
ObservableAsPropertyHelper< bool > 是你所需要的,如果你的 Children 属性 是一个反应列表,你可以合并 Changed 和 ItemChanged observables 并且有类似的东西:
public class MyViewModel : ReactiveObject
{
private readonly ObservableAsPropertyHelper<bool> _isValidPropertyHelper;
public MyViewModel()
{
var listChanged = Children.Changed.Select(_ => Unit.Default);
var childrenChanged = Children.ItemChanged.Select(_ => Unit.Default);
_isValidPropertyHelper = listChanged.Merge(childrenChanged)
.Select(_ => Children.All(c => c.IsValid))
.ToProperty(this, model => model.IsValid);
}
public bool IsValid
{
get { return _isValidPropertyHelper.Value; }
}
public ReactiveList<Item> Children { get; set; }
}