예제 #1
0
        public MainWindowViewModel()
        {
            this.Items         = new ObservableCollection <ItemViewModel>();
            this.IndicatorPile = PileFactory.Create <Panel>();

            // A handler for window loaded
            this.Ready = Command.Factory.CreateSync(() =>
            {
                this.IsEnabled = true;
            });

            // A handler for fetch button
            this.Fetch = CommandFactory.Create(async() =>
            {
                // Disable button
                this.IsEnabled = false;

                // Temporary rent Grid children accessor
                await this.IndicatorPile.RentAsync(async indicator =>
                {
                    // Show WaitingBlock control
                    var waitingBlock = new WaitingBlock();
                    indicator.Children.Add(waitingBlock);

                    try
                    {
                        // Uses Reddit API
                        var reddits = await Reddit.FetchNewPostsAsync("r/aww");

                        this.Items.Clear();

                        static async ValueTask <ImageSource?> FetchImageAsync(Uri url)
                        {
                            try
                            {
                                var bitmap = new WriteableBitmap(
                                    BitmapFrame.Create(new MemoryStream(await Reddit.FetchImageAsync(url))));
                                bitmap.Freeze();
                                return(bitmap);
                            }
                            // Some images will cause decoding error by WPF's BitmapFrame, so ignoring it.
                            catch (FileFormatException)
                            {
                                return(null);
                            }
                        }

                        foreach (var reddit in reddits)
                        {
                            this.Items.Add(new ItemViewModel
                            {
                                Title = reddit.Title,
                                Score = reddit.Score,
                                Image = await FetchImageAsync(reddit.Url)
                            });
                        }
                    }
예제 #2
0
        public MainWindowViewModel()
        {
            this.Items = new ObservableCollection <ItemViewModel>();

            // A handler for window loaded
            this.Ready = Command.Factory.CreateSync(() =>
            {
                this.IsEnabled = true;
            });

            // A handler for fetch button
            this.Fetch = CommandFactory.Create(async() =>
            {
                this.IsEnabled = false;

                try
                {
                    // Uses Reddit API
                    var reddits = await Reddit.FetchNewPostsAsync("r/aww");

                    this.Items.Clear();
예제 #3
0
        private async void fetchButton_Click(object sender, EventArgs e)
        {
            this.Enabled = false;

            try
            {
                // Uses Reddit API
                var reddits = await Reddit.FetchNewPostsAsync("r/aww");

                this.itemsList.Items.Clear();
                this.imageList.Images.Clear();

                foreach (var reddit in reddits)
                {
                    this.imageList.Images.Add(await Reddit.FetchImageAsync(reddit.Url));
                    this.itemsList.Items.Add(reddit.Title, this.imageList.Images.Count - 1);
                }
            }
            finally
            {
                this.Enabled = true;
            }
        }