0

我编写了两个自定义行为,我称之为 DragBehavior 和 DropBehavior。

DragBehavior 将 PanGestureRecognizer 添加到它的附加视图,并根据它接收到的 Pan 事件对其进行转换。此外,在被拖动时,DragBehavior 会发出一个事件,其中包含有关视图屏幕坐标的信息(Drop 目标使用它来了解它们上方是否有被拖动的视图)。

另一方面,DropBehavior 查看它的附加视图父级(预期为Layout<View> Parent)并将其DraggedView eventHandler 附加到所有实现DragBehavior 的(视觉)同级。

虽然这工作得很好,但我现在希望能够收听 DragBehavior 发出的 Drag 事件,而无需先验地期望拖动的视图是实现 DropBehavior 的视图的兄弟(期望放置的视图)。

我发现使用EventAggregator(可从代码的所有部分访问)或使用MessagingCenter可以解决问题,因为 DragBehavior 将发布拖动事件,并且应用程序周围的任何订阅者都可以监听这些事件并做出相应的反应,而无需知道或关心事件发生的地点。

我的问题来了:我无法决定使用哪种方法(如果使用这两种方法之一)。我不喜欢将应用程序的逻辑耦合到 MessagingCenter 的消息字符串下的想法,因为在我看来这会使将来的调试变得有点混乱。而 EventAggregator 意味着在应用程序的最高级别有一个静态类(或单例),这个 UI 拖动事件的唯一用例。

谁能推荐一个而不是另一个,或者为我提到的问题提供另一种解决方案?

PS:我知道 Xamarin 的拖放手势识别器的存在。但我不喜欢他们呈现的 UI,而且它的自定义选项很差。

4

0 回答 0