我想记住最后输入的内容,然后将其输出到Label上以检查其是否有效。我正在使用Montemagno的Xam.Plugins.settings。
我尝试了设置。
using Plugin.Settings;
using Plugin.Settings.Abstractions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace App424
{
// Learn more about making custom code visible in the Xamarin.Forms previewer
// by visiting https://aka.ms/xamarinforms-previewer
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
{
public static string LastPickName
{
get => AppSettings.GetValueOrDefault(nameof(LastPickName), string.Empty);
set => AppSettings.AddOrUpdateValue(nameof(LastPickName), value);
}
string name;
public MainPage()
{
InitializeComponent();
/*works if i force a text
nameEntry.Text = "You";
LastPickName = nameEntry.Text;
nameLabel.Text = LastPickName;*/
name = nameEntry.Text;
LastPickName = name
nameLabel.Text = LastPickName;
}
}
}
标签为空。它没有显示应该保存的数据。
答案 0 :(得分:1)
由于Label组件不受该变量的限制,因此仅在您再做nameEntry.Text = "You";
e时它才会获得其值。
要使其正常工作,您基本上有两种选择:
1。在每次更改时将值设置为标签;
只需设置值或变量,如Argon在其答案中建议的
2。将页面(视图)绑定到可观察对象,然后视图将侦听可观察对象(通常是视图模型)上的每处更改并对此做出反应(例如,更改其自身Text值)。>
我想您打算做的是第二个。因此,您可以在页面代码后面创建一个公共字符串full属性,并将页面实例绑定到自身。像这样:
<Label Text="{Binding MyStringProperty}"
.../>
和绑定:
private string myStringProperty;
public string MyStringProperty
{
get { return myStringProperty; }
set
{
myStringProperty = value;
OnPropertyChanged(nameof(MyStringProperty)); // Notify that there was a change on this property
}
}
如果这对您仍然没有意义/不可行,我建议您花一些时间来掌握Data Binding,这不会花很长时间,而且在Xamarin Forms中至关重要。 或者,在数据绑定上观看James's video。
答案 1 :(得分:0)
使用一种方法将值设置为设置。
<Entry Placeholder="Name" x:Name="name" Unfocused="Handle_Unfocused"/>
void Handle_Unfocused(object sender, Xamarin.Forms.FocusEventArgs e)
{
LastPickName = name.Text;
}
答案 2 :(得分:0)
使用“属性”字典存储简单值,然后使用Unfocused事件从Entry获取最后一个文本,请注意Entry.Text为null或在未聚焦时为空。
<StackLayout>
<Entry x:Name="entry1" Unfocused="Entry1_Unfocused" />
<Label
x:Name="label1"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand" />
</StackLayout>
private void Entry1_Unfocused(object sender, FocusEventArgs e)
{
if(!string.IsNullOrEmpty(entry1.Text))
{
Application.Current.Properties["myTextValue"] = entry1.Text;
label1.Text = Application.Current.Properties["myTextValue"].ToString();
}
}