【问题标题】:Xamarin Forms Binding Label Text not workingXamarin 表单绑定标签文本不起作用
【发布时间】: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(() =&gt; { 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


    【解决方案1】:

    你在后面的代码中设置了DataContext吗?

    this.DataContext = classWithStatusMessage;

    【讨论】:

    • 在类初始化中我设置了BindingContext = this;。当我在OnAppearing() 上设置文本时,这有点工作,但后来它不再工作了。我将编辑我的问题以指出我错过的一件事。
    • 我的错。我正在其他地方覆盖标签。
    猜你喜欢
    • 2017-08-15
    • 2020-02-23
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2019-03-19
    • 1970-01-01
    相关资源
    最近更新 更多