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);
    }
Exemplo n.º 2
0
        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();
        }