如何更新Xamarin表单中的标签



这里是初学者。

我正在努力获取这个操作成功执行的确切时间,并将其打印在标签上。问题是,当我点击按钮时,标签不会更新文本。

namespace HGB.Droid.Helpers
{
public class CallServiceHelper : ICallServiceHelper
{
IContactsHelper contactsHelper = DependencyService.Get<IContactsHelper>();
List<Repository> ObjContactList = new List<Repository>();
LabelModel labelModel = new LabelModel();
Context context = Android.App.Application.Context;
HttpClient client = new HttpClient();
public async Task UpdatePhonebook()
{
if (NetworkCheck.IsInternet())
{
var response = await client.GetAsync("http://mmmmmmmmmmm.aspx");
if (response.IsSuccessStatusCode)
{
string contactsJson = await response.Content.ReadAsStringAsync();
var list = JsonConvert.DeserializeObject<List<Repository>>(contactsJson);
contactsHelper.DeleteContact();
ObjContactList = list;
foreach (Repository obj in ObjContactList)
{
contactsHelper.CreateContacts(obj.name, obj.phone);
}
Device.BeginInvokeOnMainThread(() =>
{
labelModel.UpdateLabelValue.Execute(DateTime.Now.ToString());
});
}
}
else
{
Device.BeginInvokeOnMainThread(() =>
{
Toast.MakeText(context, "Error", ToastLength.Long).Show();
});

}
}

我在UI按钮上调用此功能

public partial class MainPage : ContentPage
{
ICallServiceHelper callServiceHelper = DependencyService.Get<ICallServiceHelper>();
public MainPage()
{
InitializeComponent();
}
private async void updateContactsBtn_Clicked(object sender, EventArgs e)
{
await callServiceHelper.UpdatePhonebook();
}
}

这是我的ViewModel

public class LabelModel : BindableObject
{
string dateValue = "Date Value";
public LabelModel()
{
UpdateLabelValue = new Command<string>(UpdateLabel);
}
public ICommand UpdateLabelValue { get; }
public string DateDisplay
{
get => dateValue;
set
{
dateValue = value;
OnPropertyChanged(nameof(DateDisplay));
}
}
void UpdateLabel(string newLabel)
{
DateDisplay = newLabel;
}
}

这是我的Xaml文件

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
xmlns:local="clr-namespace:HGB.ViewModel"
x:Class="HGB.MainPage">
<ContentPage.BindingContext>
<local:LabelModel/>
</ContentPage.BindingContext>
<StackLayout HorizontalOptions="Center" VerticalOptions="Center" Spacing="10">
<Button
Text="Update Phonebook"
x:Name="updateContactsBtn"
Clicked="updateContactsBtn_Clicked"
/>
<Label
VerticalOptions="Center"
HorizontalOptions="Center"
Text="{Binding DateDisplay}"
/>
</StackLayout>

我在Foreground Service类中使用Helper方法每24小时接到一次电话。我正在努力实现的是打印准确的时间,当电话簿成功更新并打印日期到我的标签。

对于您的问题,一个简单的方法是像Jason提到的那样使用MessagingCenter。

您可以在CallServiceHelper中发送消息,并在ViewModel(LabelModel.cs(中订阅此消息。

请参考以下代码:

1.在ViewMode(LabelModel.cs(的构造函数中,订阅以下消息:

public LabelModel()
{
MessagingCenter.Subscribe<object, string>(this, "time", (sender, args) =>
{
System.Diagnostics.Debug.WriteLine("received time is: "+ args);
DateDisplay  = args;
});
}

2.在您的CallServiceHelper中,公开您的消息:

MessagingCenter.Send<object, string>(this, "time", "2022-4-8");

最新更新