maui-linux/Xamarin.Forms.Maps/Pin.cs

99 строки
2.2 KiB
C#

using System;
namespace Xamarin.Forms.Maps
{
public sealed class Pin : BindableObject
{
public static readonly BindableProperty TypeProperty = BindableProperty.Create("Type", typeof(PinType), typeof(Pin), default(PinType));
public static readonly BindableProperty PositionProperty = BindableProperty.Create("Position", typeof(Position), typeof(Pin), default(Position));
public static readonly BindableProperty AddressProperty = BindableProperty.Create("Address", typeof(string), typeof(Pin), default(string));
// introduced to store the unique id for Android markers
string _label;
public string Address
{
get { return (string)GetValue(AddressProperty); }
set { SetValue(AddressProperty, value); }
}
public string Label
{
get { return _label; }
set
{
if (_label == value)
return;
_label = value;
OnPropertyChanged();
}
}
public Position Position
{
get { return (Position)GetValue(PositionProperty); }
set { SetValue(PositionProperty, value); }
}
public PinType Type
{
get { return (PinType)GetValue(TypeProperty); }
set { SetValue(TypeProperty, value); }
}
internal object Id { get; set; }
public event EventHandler Clicked;
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
return false;
if (ReferenceEquals(this, obj))
return true;
if (obj.GetType() != GetType())
return false;
return Equals((Pin)obj);
}
public override int GetHashCode()
{
unchecked
{
int hashCode = Label?.GetHashCode() ?? 0;
hashCode = (hashCode * 397) ^ Position.GetHashCode();
hashCode = (hashCode * 397) ^ (int)Type;
hashCode = (hashCode * 397) ^ (Address?.GetHashCode() ?? 0);
return hashCode;
}
}
public static bool operator ==(Pin left, Pin right)
{
return Equals(left, right);
}
public static bool operator !=(Pin left, Pin right)
{
return !Equals(left, right);
}
internal bool SendTap()
{
EventHandler handler = Clicked;
if (handler == null)
return false;
handler(this, EventArgs.Empty);
return true;
}
bool Equals(Pin other)
{
return string.Equals(Label, other.Label) && Equals(Position, other.Position) && Type == other.Type && string.Equals(Address, other.Address);
}
}
}