【发布时间】:2020-05-30 11:27:41
【问题描述】:
我正在使用 Caliburn.Micro 构建通用 Windows 应用程序,不幸的是,由于某些硬件限制,我们需要以 Windows 10 1607 为目标,因此无法实现任何依赖于 .NET Standard / UWP 16299 的包,这包括反应式用户界面。
在这个特定的场景中,我有一个视图模型优先的方法,它生成一个地图(和一些其他资源),然后将它们绑定到 XAML 视图中的一个地图视图。理想情况下,我想在通过ViewpointChanged 事件移动地图时触发一个进程。
查看模型
public class ExampleViewModel : Screen
{
public ExampleViewModel()
{
Map = new Map();
}
public Map Map { get; set; }
public BindableCollection<MapItems> MapItems { get; set; }
private UpdateMapItems(Envelope visibleArea)
{
// The visibleArea param will include the current viewpoint of the map view
// This method will effectively generate the appropriate map items based on the current coordinates
}
}
查看
...
<MapView x:Name="MapView" Map="{Binding Map}" cal:Message.Attach="[Event ViewpointChanged] = [Action UpdateMapItems(MapView.VisibleArea.Extent)]" />
...
现在这个技术上可以工作了,但有一个主要缺陷是地图的每次移动都会触发几次 ViewpointChanged 事件(例如,类似于 OnMouseMove 的效果)。
理想情况下,我希望能够限制/消除此事件,以便仅在视图未移动 300 毫秒时才处理地图项。
我发现一篇涉及实现 DispatcherTimer 的文章,但是此代码的元素,例如 DispatcherPriority 和 Dispatcher 在 UWP 中似乎不可用,因此除非存在替代方案,否则我认为这不会工作。
我查看了 System.Reactive,但这对于我想要实现的目标来说似乎异常复杂。
任何指针将不胜感激!
【问题讨论】:
-
看看ReactiveUI 和该页面上的示例(右上角)
-
不幸的是,ReactiveUI 依赖于 UWP 10.0.16299,因为应用程序需要在 10.0.14393 (LTSB) 的设备上运行,因此我们无法满足这一要求。
标签: c# mvvm uwp caliburn.micro