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

时间:2019-04-03 11:55:13

标签: c# xaml

我正在构建一个语言翻译器应用程序。我正在使用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方面的类-获取所有可用语言,检测源语言等。{{ 1}}是MainPage.xaml中的选择器,允许用户选择一种语言,将输入的文本翻译成该语言。)

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

pckLanguages

我也尝试过使用loaded event,但是在StackPanel上找不到属性'Loaded'。

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

1 个答案:

答案 0 :(得分:0)

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