Событие изменения привязываемого объекта форм Xamarin изменено - PullRequest
0 голосов
/ 28 февраля 2020

Я создал собственную карту, используя Xamarin Forms Map. Я хочу получить доступ к обновленному VisibleRegion при изменении VisibleRegion.

Пользовательский рендерер

protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    base.OnElementPropertyChanged(sender, e);

    if (Element == null)
        return;

    var map = (CustomMap)sender;
    if(map.VisibleRegion==null)
        return;

    map.OnMapRegionUpdated();
}

В пользовательском элементе управления я создал привязываемое свойство

public MapCenterPosition MapCenter { get; set; }
public static readonly BindableProperty MapCenterProperty = BindableProperty.Create(
            nameof(MapCenter),
            typeof(MapCenterPosition),
            typeof(CustomMap),
            null);


public void OnMapRegionUpdated()
{
   MapCenter = new MapCenterPosition {Position = VisibleRegion.Center};
}

MapCenterPosition.cs

public class MapCenterPosition: INotifyPropertyChanged
{
    private Position _position;

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChange([CallerMemberName]string propertyname = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
    }

    public Position Position
    {
        get => _position;
        set 
        { 
            _position = value;
            RaisePropertyChange();
        }

    }
}

Теперь у меня есть CustomMap и я привязал его к коду ViewModel. Но как я могу вызвать какой-либо метод в моей ViewModel при обновлении MapCenter?

1 Ответ

1 голос
/ 28 февраля 2020

Я сделал простую ошибку

Все, что мне нужно было сделать, это установить режим привязки как TwoWay в xaml.

И в пользовательском контроле я должен заменить это

public MapCenterPosition MapCenter { get; set; }

с

public MapCenterPosition MapCenter
{
    get => (MapCenterPosition) GetValue(MapCenterProperty);
    set => SetValue(MapCenterProperty,value);
}

Теперь я могу запускать метод в модели представления при каждом обновлении MapCenter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...