为包含可观察属性的对象列表获取单个可观察对象?
Get a single observable for a list of objects that contain observable properties?
所以我有一个包含可观察对象的对象 属性:
public class Tile
{
...
private BehaviorSubject<TileType> _type;
public IObservable<TileType> TypeChanged
{
get { return _type.AsObservable(); }
}
...
}
我还有一个 Tiles 列表:
public List<Tile> Tiles { get; } = new List<Tile>();
现在我想为图块列表制作一个单独的可观察对象,因此当任何图块的类型发生变化时都会发生一个事件(并且可观察对象应该包括它是哪个图块),例如:
public IObservable<Tile, TileType> TileTypeChanged { get; } = what?
这可能吗?
如果是,怎么做?
如果 Tiles
是一个静态列表,那么这将起作用:
List<Tile> Tiles = new List<Tile>
{
//Notifications from these Tiles will be included in TileTypeChanged
};
IObservable<(Tile, TileType)> TileTypeChanged = Tiles
.Select(t => t.TypeChanged.Select(tt => (t, tt)))
.Merge();
var willNotBeIncluded = new Tile(); //The notifications from this Tile
Tiles.Add(willNotBeIncluded); //will not be included in TileTypeChanged
如果您希望新添加的项目包含在 TileTypeChanged
父可观察对象中,那么我建议使用更具反应性的数据结构。 ReactiveList
来自 ReactiveUI 的应该可以工作,或者某种可观察到的来包装列表更改。
所以我有一个包含可观察对象的对象 属性:
public class Tile
{
...
private BehaviorSubject<TileType> _type;
public IObservable<TileType> TypeChanged
{
get { return _type.AsObservable(); }
}
...
}
我还有一个 Tiles 列表:
public List<Tile> Tiles { get; } = new List<Tile>();
现在我想为图块列表制作一个单独的可观察对象,因此当任何图块的类型发生变化时都会发生一个事件(并且可观察对象应该包括它是哪个图块),例如:
public IObservable<Tile, TileType> TileTypeChanged { get; } = what?
这可能吗? 如果是,怎么做?
如果 Tiles
是一个静态列表,那么这将起作用:
List<Tile> Tiles = new List<Tile>
{
//Notifications from these Tiles will be included in TileTypeChanged
};
IObservable<(Tile, TileType)> TileTypeChanged = Tiles
.Select(t => t.TypeChanged.Select(tt => (t, tt)))
.Merge();
var willNotBeIncluded = new Tile(); //The notifications from this Tile
Tiles.Add(willNotBeIncluded); //will not be included in TileTypeChanged
如果您希望新添加的项目包含在 TileTypeChanged
父可观察对象中,那么我建议使用更具反应性的数据结构。 ReactiveList
来自 ReactiveUI 的应该可以工作,或者某种可观察到的来包装列表更改。