![](/img/trans.png)
[英]Reaching MainPage.Xaml.cs click handler functions from App.Xaml.cs in windows phone 8
[英]How to call a function that's in MainPage.xaml.cs from App.xaml.cs
我正在构建语言翻译应用程序。 我正在使用API来获取用户可以将其输入转换为并将其存储在选择器中的所有语言。 目前,我正在尝试在应用程序启动后检索并将所有语言加载到选择器中。 我尝试通过执行以下操作在App.xaml.cs中实现OnStartUp函数:
App.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的东西,它将被打印到控制台)。 我也试过使用OnAppearing但无济于事:
protected override void OnAppearing()
{
getLanguages();
}
我也尝试使用加载的事件,但在StackPanel上找不到属性'Loaded'。
如果有人有任何解决这个问题的好方法的想法和/或知道我做错了什么,那就非常感激了。
可能最简单的方法是创建一个静态类。 您将在此类中拥有一个方法,您可以将此数据存储在静态字段中。 它将在您使用此类的任何地方都可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.