首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactiveUI谷歌地图

ReactiveUI谷歌地图
EN

Stack Overflow用户
提问于 2016-04-22 20:47:54
回答 1查看 100关注 0票数 1

问:我的ViewModel中有一个ViewModel,我想在观察它之前订阅它上的更改,包括列表中已经包含的内容。然后,这将被输入到GoogleMaps的Xamarin。

当我添加一些东西时,这似乎是可行的:

代码语言:javascript
复制
public void OnMapReady(GoogleMap map)
{
    _itemsAdded = this.ViewModel.Sensors.ItemsAdded
            .ObserveOn(RxApp.MainThreadScheduler)
            .Select(s => new CircleOptions()
                .InvokeCenter(new LatLng(s.Latitude, s.Longitude))
                .InvokeRadius(1000)
                .InvokeFillColor(Color.Blue.ToArgb())
                .InvokeStrokeColor(Color.Red.ToArgb()))
            .Subscribe(
                Observer.Create<CircleOptions>(options => map.AddCircle(options)));
}

但是,我还需要跟踪从Circle返回的map.AddCircle,以便在对象离开时可以从映射中删除它。有什么反应的方法来处理这样的案子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-25 14:38:22

我不知道这是否是最有反应的方法,但我想出了一些似乎可行的方法:

代码语言:javascript
复制
    private IDisposable _itemsAdded;
    private IDisposable _itemsRemoved;

    private readonly Dictionary<string, Circle> _circleMap = new Dictionary<string, Circle>();

    public void OnMapReady(GoogleMap map)
    {
        _circleMap.Clear();

        _itemsAdded = this.ViewModel.Sensors.ItemsAdded
            .StartWith(this.ViewModel.Sensors)
            .Subscribe(s =>
            {
                var options = new CircleOptions()
                    .InvokeCenter(new LatLng(s.Latitude, s.Longitude))
                    .InvokeRadius(1000)
                    .InvokeFillColor(Color.Blue.ToArgb())
                    .InvokeStrokeColor(Color.Red.ToArgb());

                var circle = map.AddCircle(options);
                this._circleMap.Add(s.Id, circle);
            });

        _itemsRemoved = this.ViewModel.Sensors.ItemsRemoved
            .Subscribe(s =>
            {
                Circle circle = null;
                if (this._circleMap.TryGetValue(s.Id, out circle))
                {
                    this._circleMap.Remove(s.Id);
                    circle.Remove();
                }
            });
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36803071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档