将一系列动作转换为协程\异步\反应式方法?

时间:2018-07-03 00:16:17

标签: wpf mvvm caliburn.micro

我正在尝试在ItemsControl(带有用于面板的网格)周围拖放一些形状。通过像这样在ItemsControl上使用Message.Attach,并根据需要传递$ eventArgs或$ executionContext,可以使它以基本方式工作。 将它们存储在viewmodel中。 (不存储鼠标的实际位置,而是一个Point(行,列))

  • MouseLeftButtonDown =存储鼠标的初始网格位置
  • MouseMove =存储当前鼠标网格位置
  • MouseLeftButtonUp =计算偏移量,调整要拖动的项目。

我想对各种行动有某种条件,即 除非按住鼠标按钮等,否则不要执行MouseMove。

我还希望对可以放置项目的位置有各种限制,例如,单元格为空,不会与其他任何东西重叠等等。

我的第一个想法是自定义SpecialValue $ startDrag,因此我可以测试按钮是否被按住,然后直接传递计算出的网格位置,而不是 原始的MouseEventArgs。更好一点,因为我只需要2条消息(MouseMove + MouseLeftButtonUP),但仍然不理想。

必须有一种更合适的方法来执行这样的操作。 我正在查看CM的协程,异步内容以及诸如反应性之类的东西,但我几乎对它们一无所知,或者根本不了解它们。

  • 将鼠标事件合并为一个,
  • 更改光标\装饰物
  • 等到释放按钮&&检查位置是否有效 (如果不是,请更改光标,否则)&&位置不是同一单元格
  • 最终调整物品的位置

欢迎任何想法或建议。

0 个答案:

没有答案