在函数加载时调用函数

克里斯

我正在尝试在新应用程序中使用旧代码。我有以下问题。

我需要this.Loaded += OnLoaded在我的新代码中调用类似的内容但是我不能,因为我没有: Page上课。

旧代码:

    public sealed partial class VotePage : Page
    {
        public VotePage()
        {
            this.InitializeComponent();

            // This will call the OnLoaded function
            this.Loaded += OnLoaded;
        }

旧代码(OnLoaded函数):

        public async void OnLoaded(object sender, RoutedEventArgs e)
        {
            var response = await start();

            dynamic dynJson = JsonConvert.DeserializeObject(response);

            foreach (var item in dynJson)
            {
                Object votedGame = localSettings.Values[item.slug.ToString()];
                string voted = "Collapsed";
                string btnVoted = "VOTE";
                bool btnEnabled = true;

                if(votedGame != null)
                {
                    voted = "Visible";
                    btnVoted = "VOTED!";
                    btnEnabled = false;
                }

                listofGames.Add(new Games { Title = item.name, Votes = item.votes, Slug = item.slug, Voted = voted, BtnVoted = btnVoted, BtnEnabled = btnEnabled });
            }

            gamesList.ItemsSource = listofGames;
        }

新代码:

    public class GamesList
    {
        public List<Game> Games { get; set; }
        public String Name { get; set; }

        public GamesList(String databaseName)
        {
            Name = databaseName;

            // This won't work because there is no await.
            Games = DataService.GetGames;
        }

DataService.GetGames函数:

        public async Task<List<Game>> GetGames()
        {
            Debug.WriteLine("GET for games.");

            var response = await start();

            dynamic dynJson = JsonConvert.DeserializeObject(response);

            foreach (var item in dynJson)
            {
                Object votedGame = localSettings.Values[item.slug.ToString()];
                string voted = "Collapsed";
                string btnVoted = "VOTE";
                bool btnEnabled = true;

                if (votedGame != null)
                {
                    voted = "Visible";
                    btnVoted = "VOTED!";
                    btnEnabled = false;
                }

                listofGames.Add(new Game { Title = item.name, Votes = item.votes, Slug = item.slug, Voted = voted, BtnVoted = btnVoted, BtnEnabled = btnEnabled });
            }

            return new List<Game>();
        }
毫米8

根据初始化GamesList类的位置,时间和方式,可以为它提供一个静态创建方法,如@Romasz链接的博客文章中所建议的那样:

public sealed class GamesList
{
    public List<Game> Games { get; set; }
    public String Name { get; set; }

    private GamesList(String databaseName)
    {
        Name = databaseName;
    }

    public static async Task<GamesList> Create(string databaseName)
    {
        GamesList instance = new GamesList(databaseName);
        instance.Games = await DataService.GetGames();
        return instance
    }

    ...
}

然后,您将使用factory方法创建的实例并异步初始化该类:

public VotePage()
{
    this.InitializeComponent();
    this.Loaded += OnLoaded;
}

public async void OnLoaded(object sender, RoutedEventArgs e)
{
    DataContext = await GamesList.Create("database name...");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章