2

所以我有一个包含一个可观察对象作为属性的对象:

public class Tile
{
    ...

    private BehaviorSubject<TileType> _type;
    public IObservable<TileType> TypeChanged
    {
        get { return _type.AsObservable(); }
    }

    ...
}

我还有一个瓷砖列表:

public List<Tile> Tiles { get; } = new List<Tile>();

现在我想为瓦片列表制作一个可观察的,所以当任何瓦片的类型发生变化时都会发生一个事件(并且可观察到的应该包括它是哪个瓦片),例如:

public IObservable<Tile, TileType> TileTypeChanged { get; } = what?

这可能吗?如果是这样,怎么办?

4

1 回答 1

3

如果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父 observable 中,那么我建议使用更具反应性的数据结构。ReactiveList从 ReactiveUI 应该可以工作,或者某种可观察的来包装列表更改。

于 2018-01-19T19:05:50.453 回答