private static void dateChanged(DependencyObject d,
                                        DependencyPropertyChangedEventArgs e)
        {
            var newTime = e.NewValue as DateTimeRange?;

            if (!newTime.HasValue)
            {
                return;
            }
            if (d is DateTimeRangeEdit self)
            {
                if (self.PhotoSet.Count == 0)
                {
                    return;
                }
                DateTimeRange?oldRange = DateTimeRange.FromList(
                    self.PhotoSet.Select(p => p.DateTaken));
                if (!oldRange.HasValue ||
                    !oldRange.Value.IsRange)
                {
                    self.setAll(newTime.Value.Min);
                }
                else
                {
                    var shiftAmount = newTime.Value.Min - oldRange.Value.Min;
                    self.shiftDates(shiftAmount);
                }
            }
        }
示例#2
0
 private void setFields(IReadOnlyCollection <Photo> photos)
 {
     Title = MultiString.FromCollection(
         photos, p => p.Title);
     Photographer = MultiString.FromCollection(
         photos, p => p.Photographer);
     FileNames = string.Join(",",
                             photos.Select(p => p.FileBaseName).OrderBy(s => s));
     Location = MultiGpsLocation.FromCollection(photos,
                                                g => g.Location);
     Dates = DateTimeRange.FromList(photos.Select(p => p.DateTaken));
 }
        private static void setChanged(DependencyObject d,
                                       DependencyPropertyChangedEventArgs e)
        {
            var photos             = e.NewValue as ReadOnlyObservableCollection <Photo>;
            DateTimeRangeEdit self = (d as DateTimeRangeEdit);

            self.DateRange = DateTimeRange.FromList(
                photos.Select(p => p.DateTaken));
            if (e.OldValue is INotifyCollectionChanged oc)
            {
                oc.CollectionChanged -= self.setChanged;
            }
            if (photos is INotifyCollectionChanged nc)
            {
                nc.CollectionChanged += self.setChanged;
            }
        }
        private async void shiftDates(TimeSpan shiftAmount)
        {
            if (shiftAmount == TimeSpan.Zero)
            {
                return;
            }
            var part = this.minDatePicker.CurrentDateTimePart;

            foreach (Photo p in this.PhotoSet)
            {
                if (p.DateTaken.HasValue)
                {
                    p.DateTaken = p.DateTaken.Value + shiftAmount;
                }
            }
            this.DateRange = DateTimeRange.FromList(
                this.PhotoSet.Select(p => p.DateTaken));
            // restore the CurrentDateTimePart, but only after all of the data
            // binding flow-through has had a chance to propagate.
            await this.Dispatcher.InvokeAsync(() =>
                                              this.minDatePicker.CurrentDateTimePart = part);
        }
        private async void setAll(DateTime newTime)
        {
            bool anyChanged = false;
            var  part       = this.minDatePicker.CurrentDateTimePart;

            foreach (Photo p in this.PhotoSet)
            {
                if (p.DateTaken.HasValue &&
                    p.DateTaken.Value != newTime)
                {
                    p.DateTaken = newTime;
                    anyChanged  = true;
                }
            }
            if (anyChanged)
            {
                this.DateRange = DateTimeRange.FromList(
                    this.PhotoSet.Select(p => p.DateTaken));
                // restore the CurrentDateTimePart, but only after all of the data
                // binding flow-through has had a chance to propagate.
                await this.Dispatcher.InvokeAsync(() =>
                                                  this.minDatePicker.CurrentDateTimePart = part);
            }
        }
 private void setChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     DateRange = DateTimeRange.FromList(
         PhotoSet.Select(p => p.DateTaken));
 }