问题:我的ViewModel中有一个IReactiveDerivedList<SensorViewModel>
,我希望在观察之前订阅其中的更改,包括列表中已有的内容。然后将其输入GoogleMaps for Xamarin Android。
当我添加内容时,这似乎有效:
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
,以便在对象消失时将其从地图中删除。处理此类案件的反应方式是什么?
答案 0 :(得分:1)
我不知道这是否是最活跃的方式,但我发现似乎有用的东西:
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();
}
});
}