如何从 App.xaml 调用 MainPage.xaml 中的函数.cs.cs



我正在构建一个语言翻译应用程序。我正在使用 API 来获取用户可以将其输入翻译成的所有语言,并将它们存储在选择器中。目前,我正在尝试在应用程序启动后检索所有语言并将其加载到选择器中。我尝试通过执行以下操作在 App.xaml 中实现 OnStartUp 功能.cs:

应用xaml.cs

protected override void OnStart()
{
var mainPage = new MainPage();
this.MainPage = mainPage;
mainPage.getLanguages();
}

MainPage.xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:LanguageTranslator"
x:Class="LanguageTranslator.MainPage">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
.......
<StackLayout x:Name="slLanguages" Grid.Row="5" Orientation="Horizontal" HorizontalOptions="Center" Margin="3, 6, 3, 3">
<Label Text="Languages: " />
<Picker x:Name="pckLanguages">
<Picker.Items>
</Picker.Items>
<Picker.SelectedIndex>1</Picker.SelectedIndex>
</Picker>
</StackLayout>
</Grid>
</ContentPage>

MainPage.xaml.cs

public void getLanguages()
{
#region Load all available languages into the picker 'pckLangugages'
// Fills the picker 'pckLanguages' with all available langauges when the main page is loaded
var serverResponse = Request(string.Format(ApiSetup.getLanguages, ApiSetup.APIKey, lblSourceLanguage.Text));
var dictionary = JsonConvert.DeserializeObject<IDictionary>(serverResponse.Content); // Converts the server response into JSON format 
foreach (DictionaryEntry dictionaryEntry in dictionary)
{
if (dictionaryEntry.Key.Equals("langs"))
{
var languages = (JObject)dictionaryEntry.Value;
LanguagesList = new List<string>();
pckLanguages.Items.Clear();
foreach (var lang in languages)
{
if (!lang.Equals(lblSourceLanguage.Text))
{
pckLanguages.Items.Add(lang.Value.ToString());
LanguagesList.Add(lang.Key);
}
}
}
}

(Request是一个设置RestSharp客户端和请求的函数。ApiSetup是一个处理API端的类 - 获取所有可用的语言,检测源语言等。pckLanguages是MainPage.xaml中的一个选择器,允许用户选择一种语言,他们可以将输入的文本翻译成该语言)。

虽然OnStartUp似乎确实被调用了(如果我Debug.Write的东西,它将被打印到控制台)。我也尝试使用OnAppear,但无济于事:

protected override void OnAppearing()
{
getLanguages();
}

我也尝试使用加载的事件,但在 StackPanel 上找不到属性"已加载"。

如果有人对解决这个问题的好方法有任何想法和/或知道我做错了什么,将不胜感激。

可能最简单的方法是创建一个静态类。此类中将有一个方法,用于将此数据存储在静态字段中。它将在您使用此类的任何地方可用。

最新更新