我有一个鼠标左键状态的流:
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向下 - >移动 - > LMB向上)时,它应该用鼠标移动的位置列表触发。
如何将IObservable<IObservable<Point>>
转换为IObservable<IEnumerable<Point>>
?
答案 0 :(得分:1)
将您的Window
运营商更改为Buffer
运营商(this overload).
运营商生成IObservable<IList<T>>
,其中IList
属于IEnumerable
基于OP评论的替代解决方案:
var leftMouseDragLists = leftMouseDrag.SelectMany(i => i.ToList());