Я знаю, что на это уже отвечали несколько раз, и я следовал всем возможным путеводителям. Это не работает.
Вот мой код:
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);
});
}
}