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

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

Вот мой код:

XAML

<Label Text="{Binding Path=StatusMessage, Mode=TwoWay}"
       Margin="10,0,10,5"
       VerticalOptions="End"/>

C#

    private string statusMessage;
    public string StatusMessage { 
        get { return statusMessage; }
        set
        {
            statusMessage = value;
            OnPropertyChanged(nameof(StatusMessage));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

Класс расширяется INotifyPropertyChanged и чтобы изменить текст метки, я попытался StatusMessage = "Status: ..."; и Device.BeginInvokeOnMainThread(() => { StatusMessage = "Status: ...";});.

Ничего не работает.

Есть идеи, как исправить этот беспорядок?

РЕДАКТИРОВАТЬ

Добавление BindingContext = this;, как предложено в главной справке, помогло.

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

private void OnEnableUser(bool authenticated)
{
    if (SynchronizationContext.Current != null)
    {
        [...]
    } else
    {
        Device.BeginInvokeOnMainThread(() =>
        {
            OnEnableUser(authenticated);
        });
    }
}

1 Ответ

2 голосов
/ 23 апреля 2020

Вы установили DataContext в коде позади?

this.DataContext = classWithStatusMessage;

...