【发布时间】:2020-08-06 11:01:15
【问题描述】:
我知道这个问题之前已经被回答过多次,并且我已经遵循了所有可能的指南。 它不起作用。
这是我的代码:
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);
});
}
}
【问题讨论】:
标签: c# xamarin.forms data-binding xamarin.android