public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { ReadOnlyObservableCollection <object> items = value as ReadOnlyObservableCollection <object>; if (items == null) { throw new ArgumentNullException(nameof(items)); } DateTime latestOrderDate = items.Max(x => x.OrderDate); return(latestOrderDate); }
public SeriesFormViewModel( Series series, ReadOnlyObservableCollection <Kind> kinds, string fileName, ResourceManager?resourceManager = null, IScheduler?scheduler = null, IEntityService <Series>?seriesService = null, ISettingsService?settingsService = null) : base(series.Entry, resourceManager, scheduler) { this.Series = series; this.Kinds = kinds; this.seriesService = seriesService ?? Locator.Current.GetService <IEntityService <Series> >(fileName); this.settingsService = settingsService ?? Locator.Current.GetService <ISettingsService>(fileName); this.SelectComponent = ReactiveCommand.Create <ISeriesComponentForm, ISeriesComponentForm>( form => form); this.componentsSource.Connect() .Transform(this.CreateForm) .Sort( SortExpressionComparer <ISeriesComponentForm> .Ascending(form => form.SequenceNumber), resort: this.resort) .Bind(out this.componentForms) .DisposeMany() .Subscribe(); this.ComponentForms.ToObservableChangeSet() .Transform(this.CreateComponent) .Bind(out this.components) .DisposeMany() .Subscribe(); this.ComponentForms.ToObservableChangeSet() .Filter(form => form is SeasonFormViewModel) .Transform(form => (SeasonFormViewModel)form) .Bind(out this.seasons) .DisposeMany() .Subscribe(); this.ComponentForms.ToObservableChangeSet() .Filter(form => form is SpecialEpisodeFormViewModel) .Transform(form => (SpecialEpisodeFormViewModel)form) .Bind(out this.specialEpisodes) .DisposeMany() .Subscribe(); this.Components.ToObservableChangeSet() .AutoRefresh(component => component.SequenceNumber) .ToCollection() .Select(components => components.Count != 0 ? components.Max(c => c.SequenceNumber) : 0) .Subscribe(this.maxSequenceNumberSubject); this.CopyProperties(); this.ImdbLinkRule = this.ValidationRule(vm => vm.ImdbLink, link => link.IsUrl(), "ImdbLinkInvalid"); this.PosterUrlRule = this.ValidationRule(vm => vm.PosterUrl, url => url.IsUrl(), "PosterUrlInvalid"); this.AddSeason = ReactiveCommand.CreateFromTask(this.AddSeasonAsync); this.AddSpecialEpisode = ReactiveCommand.Create(this.OnAddSpecialEpisode); this.ConvertToMiniseries = ReactiveCommand.Create(() => { }, this.CanConvertToMiniseries); this.AddSeason .Merge(this.AddSpecialEpisode) .SelectMany(_ => this.ComponentForms.MaxBy(season => season.SequenceNumber)) .Cast <ISeriesComponentForm>() .InvokeCommand(this.SelectComponent); this.CanDeleteWhenNotChanged(); this.CanCreateMovieSeries(); this.EnableChangeTracking(); }