在 ReactiveList 的 Change observable 中检索省略 object

Retrieve omitting object in ReactiveList's Change observable

我有几个 objects,每个 ReactiveList (children),我想对其更改执行一些逻辑。 parent 是动态的,也在 ReactiveList 中。基本上我是这样做的:

var parents = new ReactiveList<Parent>();
parents.Add(new Parent() { Id = 1, Children = new ReactiveList<Child>() };
parents.Add(new Parent() { Id = 2, Children = new ReactiveList<Child>() };
parents.Changed
    .SelectMany(_ => parents.Select(x => x.Children.Changed).Merge())
    .Subscribe(x => {
       // Some of the parent's children have changed. But which parent?
    });

// trigger Changed event
parents[1].Children.Add(new Child());

问题是我需要知道 parent 中的哪一个发生了这种情况。如果我至少有正在更改的集合,我可以检索 parent。但是我查看了传下来的NotifyCollectionChangedEventArgs,里面没有任何有用的东西。

所以除了通过 parent 循环 "manually" 并订阅每个,这对我来说看起来不是很 Rxly 并且可能引入了一堆泄漏问题,有没有一个优雅的解决方案?

您没有给我们太多代码,但这对您有用吗?

var query =
    from parent in parents.Changed
    from child in parent.Children.Changed.Merge()
    select new
    {
        parent,
        child,
    };

query
    .Subscribe((p, c) =>
    {
    });

只需保存 parent @Enigmativity 建议的方式:

parents.Changed
    .SelectMany(_ => parents
        .Select(parent => parent.Children.Changed.Select(childEvent =>
            new { parent, childEvent}))
        .Merge())
    .Subscribe(x => {
       // x.parent / x.childEvent
    });

注意你的代码会涉及很多订阅(每次parent列表变化,所有children订阅都是re-made),也许你应该考虑使用change tracking 来自 ReactiveList 的支持? (如果可能的话,因为它不会告诉你哪个 child 改变了)