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); } } }
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)); }