我知道以前曾多次回答过这个问题,并且我已遵循所有可能的指南。它不起作用。
这是我的代码:
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);
});
}
}
您是否在后面的代码中设置了DataContext?
this.DataContext = classWithStatusMessage;