Решение first заключается в том, что вы можете использовать messaging-center , который может взаимодействовать между общим проектом и проектом iOS / Android.
Опубликуйте сообщение в методе doSomethingOnMap
, и везде, где вы подписались на сообщение, будет срабатывать.
секунда - это создать событие в вашем общем проекте и подписатьсяк этому событию в рендере я написал оба решения ниже:
В вашем общем проекте:
public class CustomMap : Map
{
public List<CustomPin> CustomPins { get; set; }
public event EventHandler CallToNativeMethod;
public void doSomething()
{
if (CallToNativeMethod != null)
CallToNativeMethod(this, new EventArgs());
}
public void doSomething(CustomMap myMap) {
MessagingCenter.Send<CustomMap>(this, "Hi");
}
}
В рендере:
protected override void OnElementChanged(ElementChangedEventArgs<View> e)
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
}
if (e.NewElement != null)
{
MessagingCenter.Subscribe<CustomMap>(this, "Hi", (sender) =>
{
// Do something whenever the "Hi" message is received
Console.WriteLine("hi");
});
((CustomMap)e.NewElement).CallToNativeMethod += (sender, arg) =>
{
Console.WriteLine("native method");
};
}
}
В любом месте, где выхочу вызвать этот метод:
private void Button_Clicked(object sender, System.EventArgs e)
{
customMap.doSomething();
customMap.doSomething(customMap);
}