private void OnEXIFReturned(object sender, GetEXIFEventArgs e)
        {
            if (!PhotoCache.ContainsKey(e.PhotoId))
                return;

            Photo photo = PhotoCache[e.PhotoId];
            JObject json = JObject.Parse(e.Response);
            photo.EXIF = PhotoEXIFFactory.EXIFWithJObject((JObject)json["photo"]);

            EXIFUpdatedEventArgs evt = new EXIFUpdatedEventArgs();
            evt.PhotoId = photo.ResourceId;
            EXIFUpdated.DispatchEvent(this, evt);
        }
        private void OnEXIFUpdated(object sender, EXIFUpdatedEventArgs e)
        {
            Dispatcher.BeginInvoke(() => {
                if (e.PhotoId != PhotoSource.ResourceId)
                    return;

                LoadingView.Visibility = Visibility.Collapsed;
                DescriptionLabel.Visibility = Visibility.Visible;
                DescriptionLabel.Text = this.GetEXIFString();
            });
        }