如何转动IObservable <iobservable <t>&gt;进入IObservable <ienumerable <t>&gt;?

时间:2016-07-04 09:52:05

标签: c# system.reactive rx.net

我有一个鼠标左键状态的流:

var leftMouseButton = mouse.Select(x => x.LeftButton).DistinctUntilChanged();

我然后Window这给了我一个 observables 代表鼠标的拖拽:

var leftMouseDrag = mouse
    .Select(mouseState => new Point(mouseState.X, mouseState.Y))
    .DistinctUntilChanged()
    .Window(leftMouseButton.Where(x => x == ButtonState.Pressed), x => leftMouseButton.Where(y => y != x));

现在我想从leftMouseDrag创建一个包含点列表的流。每次用户完成拖动(LMB向下 - &gt;移动 - &gt; LMB向上)时,它应该用鼠标移动的位置列表触发。

如何将IObservable<IObservable<Point>>转换为IObservable<IEnumerable<Point>>

1 个答案:

答案 0 :(得分:1)

将您的Window运营商更改为Buffer运营商(this overload).

运营商生成IObservable<IList<T>>,其中IList属于IEnumerable

基于OP评论的替代解决方案:

var leftMouseDragLists = leftMouseDrag.SelectMany(i => i.ToList());