c# - 如何在 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"/>
解决方案
这在 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 开始,我强烈建议您遵循官方入门指南,该指南清楚而深入地解决每个主题,以了解您的所有知识需要。
我希望它有所帮助。
推荐阅读
- ios - 使用深度链接分享用户资料
- azure - 您可以使用现有的 JSON 克隆管道吗?
- java - 数据不正确时的 Java showInputDialog
- c# - UWP C# TryGetItemAsync - 呼叫第三次挂起
- python - Pandas Series.apply - 使用另一个系列的参数?
- reactjs - 将 React-Js 函数转换为类
- matlab - 实现 go to definition 的完整代码
- c - 使用 sprintf 函数的附带效应
- java - 在 Chrome/Chromium 中具有特定配置文件的 Headless
- eclipse - 如何使 Eclipse 的下拉菜单左对齐(恢复正常)?