ReactiveUI中的等价性?

时间:2016-01-26 22:42:22

标签: c# .net system.reactive reactiveui

我在ReactiveObject 中有这个属性:

bool IsValid => Children.All(child => child.IsValid);

问题在于,当孩子被修改时,它不会提出任何变更通知(他们的" IsValid"属性)。

如何在ReactiveUI中以正确的方式完成?

注意:

  • Child也是ReactiveObject。
  • 我可以修改这两个类,父类 和孩子们一样,满足RxUI的规则和指导方针 限制。

1 个答案:

答案 0 :(得分:4)

<强> ObservableAsPropertyHelper&LT; bool&gt; 是您所需要的,如果 Children 属性是一个被动列表,您可以合并已更改 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; }
    }