![](/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.