簡體   English   中英

如何從App.xaml.cs調用MainPage.xaml.cs中的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM