在 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 改变了)
我有几个 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 改变了)