我有一个使用Xamarin.Forms.Maps地图视图的Xamarin.Forms项目。我知道可以在运行时更改Pin
的位置,以便在显示中自动更新它,而不必在每次更新时都创建新的Pin
。我通过更新Position
的{{1}}属性来进行测试。但是,我遇到了以下问题:
我有一个Pin
类,它使用不同的类型/类来存储位置。每次创建新的Target
对象时,也会创建一个新的Target
对象,然后将其添加到地图中。目前,这是我目前的工作方式。
TargetPin
Target
namespace Foo.Models
{
public struct WPos
{
public double lat;
public double lon;
}
public class Target
{
public WPos location { get; set; }
public Target(JObject json)
{
location = new WPos
{
lat = Util.jGet<double>(json, "location/latitude"),
lon = Util.jGet<double>(json, "location/longitude")
};
}
}
}
TargetPin
以及namespace Foo.Controls
{
public class TargetPin : Pin
{
Target target;
public string pinId { get; set; }
public string url { get; set; }
public TargetPin(Target _t)
{
target = _t;
url = "url";
Label = _t.targetId.ToString();
Type = PinType.Place;
pinId = _t.targetId.ToString();
Position = new Position(_t.location.lat, _t.location.lon);
}
}
}
Map
我的问题是,namespace Foo.Controls
{
public class TargetMap : Map
{
public List<TargetPin> targetPins { get; set; }
public TargetMap() : base()
{
targetPins = new List<TargetPin>();
}
void onTrackAdded(object sender, Target t)
{
Device.BeginInvokeOnMainThread(() =>
{
TargetPin pin = new TargetPin(t);
Pins.Add(pin);
targetPins.Add(pin);
});
}
}
}
使用Target
作为位置,WPos
(作为图形表示)使用TargetPin
。这意味着每当我创建新的Position
时都必须实例化new Position(double, double)
,并且该职位不会通过引用更新。
是否可以使用一个TargetPin
类型的成员来存储对另一个对象的基本类型成员的引用?还是只想在ref
类中也使用Position
类型?