首页 > 解决方案 > 如何在 xamarin 中更改标签文本

问题描述

我对 Xamarin 表单比较陌生。我发现我无法从后面的代码中更改标签文本。通常我会这样做myLabel.text = variable。这在 Xamarin 中有效吗?如果确实如此,为什么此代码不会更改文本?

Label_ControlSW.Text = controlSW_Out;
            Label_BLESW.Text = bleSW_Out;
            Label_Mode.Text = mode_Out;

Xaml 文件

<Label x:Name="Label_ControlSW" Grid.Row="1" Grid.Column="1" HorizontalOptions="Center"  VerticalOptions="Center" FontSize="17" TextColor="White"/>
                <Label x:Name="Label_BLESW" Grid.Row="2" Grid.Column="1" HorizontalOptions="Center"  VerticalOptions="Center" FontSize="17" TextColor="#525252"/>
                <Label x:Name="Label_Mode"  Grid.Row="4" Grid.Column="1" HorizontalOptions="Center"  VerticalOptions="Center" FontSize="17" TextColor="White"/>

标签: c#xamlxamarinxamarin.forms

解决方案


这在 Xamarin 中有效吗?

是的,它确实。

如果确实如此,为什么此代码不会更改文本?

因为Label组件没有绑定到变量,所以它只是在你做的时候得到它的值,Label_ControlSW.Text = controlSW_Out;而不是进一步。

要使其正常工作,您基本上有两种选择:

1.在每次更改时为标签设置值;

这里没有魔法。只需像Ali Heikal 的回答所建议的那样设置值或变量,但您必须每次都手动进行。

2. 将页面(视图)绑定到可观察对象(模型),然后视图将监听模型上的每一个变化并对此做出反应(Text例如,改变它自己的值)。

我猜你打算做的是第二个。因此,您可以在页面的代码隐藏中创建公共字符串属性,并将页面实例绑定到自身。像这样:

XAML

<Label Text="{Binding MyStringProperty}"
       .../>

背后的代码

public partial class MyTestPage : ContentPage
{
    private string myStringProperty;
    public string MyStringProperty
    {
        get { return myStringProperty; }
        set 
        {
            myStringProperty = value;
            OnPropertyChanged(nameof(MyStringProperty)); // Notify that there was a change on this property
        }
    }
    
    public MyTestPage()
    {
        InitializeComponents();
        BindingContext = this;

        MyStringProperty = "New label text"; // It will be shown at your label
    }
}

您应该查看有关 XF 上的数据绑定和 MVVM 模式的官方文档,如果您从 Xamarin.Forms 开始,我强烈建议您遵循官方入门指南,该指南清楚而深入地解决每个主题,以了解您的所有知识需要。

我希望它有所帮助。


推荐阅读