响应式 UI 中的等效性

本文关键字:UI 响应 | 更新日期: 2023-09-27 18:31:57

>我在ReactiveObject中有这个属性:

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

问题是,当然,当子项被修改时,它不会引发任何更改通知(它们的"IsValid"属性)。

如何在反应式UI中以正确的方式完成此操作?

注意:

  • Child 也是一个 ReactiveObject。
  • 我可以修改两个类,父级和儿童,以符合 RxUI 规则和准则,没有限制。

响应式 UI 中的等效性

ObservableAsPropertyHelper 是你需要的,如果你的 Children 属性是一个反应式列表,你可以合并 Changed 和 ItemChanged 可观察量,并得到类似的东西:

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; }
    }