我有一个关于鼠标左键状态的流:
var leftMouseButton = mouse.Select(x => x.LeftButton).DistinctUntilChanged();
然后我Window
这个给我一个可观察对象的表示鼠标拖动:
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>>
?
将Window
操作符更改为Buffer
操作符(此重载)。
运算符产生IObservable<IList<T>>
,其中IList
为IEnumerable
基于OP注释的备选方案:
var leftMouseDragLists = leftMouseDrag.SelectMany(i => i.ToList());