问:我的ViewModel中有一个ViewModel,我想在观察它之前订阅它上的更改,包括列表中已经包含的内容。然后,这将被输入到GoogleMaps的Xamarin。
当我添加一些东西时,这似乎是可行的:
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,以便在对象离开时可以从映射中删除它。有什么反应的方法来处理这样的案子?
发布于 2016-04-25 14:38:22
我不知道这是否是最有反应的方法,但我想出了一些似乎可行的方法:
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();
}
});
}https://stackoverflow.com/questions/36803071
复制相似问题