Как вызвать функцию из MainPage.xaml.cs из App.xaml.cs - PullRequest
0 голосов
/ 03 апреля 2019

Я создаю приложение для языкового переводчика.Я использую API, чтобы получить все языки, на которые пользователь может перевести свой ввод, и хранить их в средстве выбора.В настоящее время я пытаюсь получить и загрузить все языки в средство выбора после запуска приложения.Я попытался реализовать функцию OnStartUp в App.xaml.cs, выполнив следующие действия:

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, кажется, вызывается (если я что-то отлаживаю. Напишу, он будет выведен на консоль).Я также пытался использовать OnAppearing, но безрезультатно:

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

Я также пытался использовать загруженное событие , но свойство Stacked не было найдено в StackPanel.

Если у кого-нибудь есть идеи о том, как решить эту проблему, и / или он знает, что я делаю неправильно, это будет высоко ценится.

1 Ответ

0 голосов
/ 03 апреля 2019

Возможно, проще всего было бы создать статический класс.У вас будет метод в этом классе, где вы будете хранить эти данные в статическом поле.Он будет доступен везде, где вы используете этот класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...