3

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

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>>

4

1 回答 1

1

Window将您的运算符更改为Buffer运算符(此重载)。

运算符产生IObservable<IList<T>>,其中IListIEnumerable


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

var leftMouseDragLists = leftMouseDrag.SelectMany(i => i.ToList());
于 2016-07-04T10:05:24.583 回答