繁体   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