コード例 #1
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            //Empty state button config
            EmptyStateButton.Layer.BorderWidth = 1;
            EmptyStateButton.Layer.BorderColor = Color.TimeEntriesLog.ButtonBorder.ToNativeColor().CGColor;
            EmptyStateButton.SetTitle(Resources.TimeEntriesLogEmptyStateButton, UIControlState.Normal);

            //TableView config
            var source = new TimeEntriesLogViewSource(TimeEntriesTableView);

            TimeEntriesTableView.Source = source;

            //Converters
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();

            var bindingSet = this.CreateBindingSet <TimeEntriesLogViewController, TimeEntriesLogViewModel>();

            //Text
            bindingSet.Bind(EmptyStateTextLabel).To(vm => vm.EmptyStateText);
            bindingSet.Bind(EmptyStateTitleLabel).To(vm => vm.EmptyStateTitle);

            //Time entries log
            bindingSet.Bind(source).To(vm => vm.TimeEntries);

            //Visibility
            bindingSet.Bind(EmptyStateView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsEmpty)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(EmptyStateButton)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsWelcome)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(TimeEntriesTableView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsEmpty)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(EmptyStateImageView)
            .For(v => v.BindVisibility())
            .To($"{nameof(TimeEntriesLogViewModel.IsEmpty)}&&!{nameof(TimeEntriesLogViewModel.IsWelcome)}")
            .WithConversion(visibilityConverter);

            bindingSet.Bind(WelcomeImageView)
            .For(v => v.BindVisibility())
            .To($"{nameof(TimeEntriesLogViewModel.IsEmpty)}&&{nameof(TimeEntriesLogViewModel.IsWelcome)}")
            .WithConversion(visibilityConverter);

            //Commands
            bindingSet.Bind(source)
            .For(s => s.SelectionChangedCommand)
            .To(vm => vm.EditCommand);

            bindingSet.Apply();
        }
コード例 #2
0
        public void VisibilityValueConverter_Test(bool visible, bool hide, MvxVisibility expected)
        {
            var converter = new MvxVisibilityValueConverter();
            var result    = converter.Convert(visible, typeof(bool), hide, CultureInfo.CurrentUICulture);

            Assert.Equal(expected, result);
        }
コード例 #3
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            ContentView.BackgroundColor = UIColor.White;
            DurationLabel.Font          = DurationLabel.Font.GetMonospacedDigitFont();

            this.DelayBind(() =>
            {
                var visibilityConverter = new MvxVisibilityValueConverter();
                var durationCombiner    = new DurationValueCombiner();
                var dateTitleConverter  = new DateToTitleStringValueConverter();

                var bindingSet = this.CreateBindingSet <TimeEntriesLogHeaderViewCell, TimeEntryViewModelCollection>();

                //Text
                bindingSet.Bind(DateLabel)
                .To(vm => vm.Date)
                .WithConversion(dateTitleConverter);

                bindingSet.Bind(DurationLabel)
                .ByCombining(durationCombiner,
                             vm => vm.TotalTime,
                             vm => vm.DurationFormat);

                bindingSet.Apply();
            });
        }
コード例 #4
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();

            var colorConverter              = new MvxNativeColorValueConverter();
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var timeSpanConverter           = new TimeSpanToDurationValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();

            var bindingSet = this.CreateBindingSet <MainViewController, MainViewModel>();

            //Commands
            bindingSet.Bind(settingsButton).To(vm => vm.OpenSettingsCommand);
            bindingSet.Bind(StopTimeEntryButton).To(vm => vm.StopTimeEntryCommand);
            bindingSet.Bind(StartTimeEntryButton).To(vm => vm.StartTimeEntryCommand);
            bindingSet.Bind(EditTimeEntryButton).To(vm => vm.EditTimeEntryCommand);
            bindingSet.Bind(MainPagedScrollView)
            .For(v => v.RefreshCommand)
            .To(vm => vm.RefreshCommand);

            bindingSet.Bind(CurrentTimeEntryCard)
            .For(v => v.BindTap())
            .To(vm => vm.EditTimeEntryCommand);

            //Visibility
            bindingSet.Bind(CurrentTimeEntryCard)
            .For(v => v.BindVisibility())
            .To(vm => vm.CurrentlyRunningTimeEntry)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(StartTimeEntryButton)
            .For(v => v.BindVisibility())
            .To(vm => vm.CurrentlyRunningTimeEntry)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(SpiderBroImageView)
            .For(v => v.BindVisibility())
            .To(vm => vm.SpiderIsVisible)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(SyncIndicatorView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsSyncing)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(MainPagedScrollView)
            .For(v => v.IsSyncing)
            .To(vm => vm.IsSyncing);

            //Text
            bindingSet.Bind(CurrentTimeEntryDescriptionLabel).To(vm => vm.CurrentlyRunningTimeEntry.Description);
            bindingSet.Bind(CurrentTimeEntryElapsedTimeLabel)
            .To(vm => vm.CurrentTimeEntryElapsedTime)
            .WithConversion(timeSpanConverter);

            bindingSet.Apply();
        }
コード例 #5
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            TimeLabel.Font = TimeLabel.Font.GetMonospacedDigitFont();

            this.DelayBind(() =>
            {
                var colorConverter      = new MvxRGBValueConverter();
                var visibilityConverter = new MvxVisibilityValueConverter();
                var timeSpanConverter   = new TimeSpanToDurationValueConverter();
                var descriptionTopDistanceValueConverter = new BoolToConstantValueConverter <nfloat>(HasProjectDistance, NoProjectDistance);

                var bindingSet = this.CreateBindingSet <TimeEntriesLogViewCell, TimeEntryViewModel>();

                //Text
                bindingSet.Bind(ProjectLabel).To(vm => vm.ProjectName);
                bindingSet.Bind(DescriptionLabel).To(vm => vm.Description);
                bindingSet.Bind(TimeLabel)
                .To(vm => vm.Duration)
                .WithConversion(timeSpanConverter);

                //Color
                bindingSet.Bind(ProjectLabel)
                .For(v => v.TextColor)
                .To(vm => vm.ProjectColor)
                .WithConversion(colorConverter);

                bindingSet.Bind(ProjectDotView)
                .For(v => v.BackgroundColor)
                .To(vm => vm.ProjectColor)
                .WithConversion(colorConverter);

                //Visibility
                bindingSet.Bind(DescriptionTopDistanceConstraint)
                .For(v => v.Constant)
                .To(vm => vm.HasProject)
                .WithConversion(descriptionTopDistanceValueConverter);

                bindingSet.Bind(ProjectLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Bind(ProjectDotView)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Bind(TaskLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Apply();
            });
        }
コード例 #6
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            ContentView.BackgroundColor = UIColor.White;

            this.DelayBind(() =>
            {
                var colorConverter      = new MvxRGBValueConverter();
                var visibilityConverter = new MvxVisibilityValueConverter();
                var timeSpanConverter   = new TimeSpanToDurationValueConverter();
                var descriptionTopDistanceValueConverter = new BoolToConstantValueConverter <nfloat>(HasProjectDistance, NoProjectDistance);

                var bindingSet = this.CreateBindingSet <SuggestionsViewCell, Suggestion>();

                //Text
                bindingSet.Bind(ProjectLabel).To(vm => vm.ProjectName);
                bindingSet.Bind(DescriptionLabel).To(vm => vm.Description);

                //Color
                bindingSet.Bind(ProjectLabel)
                .For(v => v.TextColor)
                .To(vm => vm.ProjectColor)
                .WithConversion(colorConverter);

                bindingSet.Bind(ProjectDotView)
                .For(v => v.BackgroundColor)
                .To(vm => vm.ProjectColor)
                .WithConversion(colorConverter);

                //Visibility
                bindingSet.Bind(DescriptionTopDistanceConstraint)
                .For(v => v.Constant)
                .To(vm => vm.HasProject)
                .WithConversion(descriptionTopDistanceValueConverter);

                bindingSet.Bind(ProjectLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Bind(ProjectDotView)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Bind(TaskLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Apply();
            });
        }
コード例 #7
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            //TableView config
            var source = new TimeEntriesLogViewSource(TimeEntriesTableView);

            TimeEntriesTableView.Source = source;

            //Converters
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();

            var bindingSet = this.CreateBindingSet <TimeEntriesLogViewController, TimeEntriesLogViewModel>();

            //Text
            bindingSet.Bind(EmptyStateTextLabel).To(vm => vm.EmptyStateText);
            bindingSet.Bind(EmptyStateTitleLabel).To(vm => vm.EmptyStateTitle);

            //Time entries log
            bindingSet.Bind(source).To(vm => vm.TimeEntries);

            //Visibility
            bindingSet.Bind(EmptyStateView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsEmpty)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(TimeEntriesTableView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsEmpty)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(EmptyStateImageView)
            .For(v => v.BindVisibility())
            .To($"{nameof(TimeEntriesLogViewModel.IsEmpty)}&&!{nameof(TimeEntriesLogViewModel.IsWelcome)}")
            .WithConversion(visibilityConverter);

            bindingSet.Bind(WelcomeImageView)
            .For(v => v.BindVisibility())
            .To($"{nameof(TimeEntriesLogViewModel.IsEmpty)}&&{nameof(TimeEntriesLogViewModel.IsWelcome)}")
            .WithConversion(visibilityConverter);

            //Commands
            bindingSet.Bind(source)
            .For(s => s.SelectionChangedCommand)
            .To(vm => vm.EditCommand);

            bindingSet.Bind(source)
            .For(v => v.ContinueTimeEntryCommand)
            .To(vm => vm.ContinueTimeEntryCommand);

            bindingSet.Apply();
        }
コード例 #8
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            ContentView.BackgroundColor = UIColor.White;
            FadeView.Layer.AddSublayer(new CAGradientLayer
            {
                Colors     = new[] { UIColor.White.ColorWithAlpha(0.0f).CGColor, UIColor.White.CGColor },
                Locations  = new[] { new NSNumber(0.0f), new NSNumber(0.2f) },
                StartPoint = new CGPoint(0.0, 0.5),
                EndPoint   = new CGPoint(1.0, 0.5),
                Frame      = FadeView.Bounds
            });

            StartButton.TouchUpInside += onStartButtonTap;

            this.DelayBind(() =>
            {
                var colorConverter      = new MvxRGBValueConverter();
                var visibilityConverter = new MvxVisibilityValueConverter();
                var timeSpanConverter   = new TimeSpanToDurationValueConverter();
                var descriptionTopDistanceValueConverter = new BoolToConstantValueConverter <nfloat>(HasProjectDistance, NoProjectDistance);
                var projectTaskClientCombiner            = new ProjectTaskClientValueCombiner(
                    ProjectTaskClientLabel.Font.CapHeight,
                    Color.Suggestions.ClientColor.ToNativeColor(),
                    true
                    );

                var bindingSet = this.CreateBindingSet <SuggestionsViewCell, Suggestion>();

                //Text
                bindingSet.Bind(DescriptionLabel).To(vm => vm.Description);
                bindingSet.Bind(ProjectTaskClientLabel)
                .For(v => v.AttributedText)
                .ByCombining(projectTaskClientCombiner,
                             v => v.ProjectName,
                             v => v.TaskName,
                             v => v.ClientName,
                             v => v.ProjectColor);

                //Visibility
                bindingSet.Bind(DescriptionTopDistanceConstraint)
                .For(v => v.Constant)
                .To(vm => vm.HasProject)
                .WithConversion(descriptionTopDistanceValueConverter);

                bindingSet.Bind(ProjectTaskClientLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Apply();
            });
        }
コード例 #9
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            prepareViews();

            this.DelayBind(() =>
            {
                var backgroundColorConverter
                    = new BoolToConstantValueConverter <UIColor>(
                          Color.Calendar.SelectedDayBackgoundColor.ToNativeColor(),
                          Color.Common.Transparent.ToNativeColor());

                var todayVisibilityConverter = new MvxVisibilityValueConverter();

                var bindingSet = this.CreateBindingSet <ReportsCalendarViewCell, CalendarDayViewModel>();

                //Text
                bindingSet.Bind(Text).To(vm => vm.Day);

                //Color
                bindingSet.Bind(Text)
                .For(v => v.TextColor)
                .ByCombining(new CalendarCellTextColorValueCombiner(),
                             v => v.IsInCurrentMonth,
                             v => v.Selected);

                bindingSet.Bind(BackgroundView)
                .For(v => v.BackgroundColor)
                .To(vm => vm.Selected)
                .WithConversion(backgroundColorConverter);

                //Rounding
                bindingSet.Bind(BackgroundView)
                .For(v => v.RoundLeft)
                .To(vm => vm.IsStartOfSelectedPeriod);

                bindingSet.Bind(BackgroundView)
                .For(v => v.RoundRight)
                .To(vm => vm.IsEndOfSelectedPeriod);

                //Today
                bindingSet.Bind(TodayBackgroundView)
                .For(v => v.BindVisibility())
                .To(vm => vm.IsToday)
                .WithConversion(todayVisibilityConverter);

                bindingSet.Apply();
            });

            AddGestureRecognizer(new UITapGestureRecognizer(
                                     () => CellTappedCommand?.Execute((CalendarDayViewModel)DataContext)));
        }
コード例 #10
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            FadeView.FadeRight = true;

            this.DelayBind(() =>
            {
                var colorConverter      = new MvxRGBValueConverter();
                var durationCombiner    = new DurationValueCombiner();
                var visibilityConverter = new MvxVisibilityValueConverter();
                var bindingSet          = this.CreateBindingSet <ReportsLegendViewCell, ChartSegment>();

                ProjectLabel.SetKerning(-0.2);
                ClientLabel.SetKerning(-0.2);
                TotalTimeLabel.SetKerning(-0.2);
                PercentageLabel.SetKerning(-0.2);

                //Text
                bindingSet.Bind(ProjectLabel).To(vm => vm.ProjectName);
                bindingSet.Bind(ClientLabel).To(vm => vm.ClientName);
                bindingSet.Bind(PercentageLabel)
                .For(v => v.Text)
                .ByCombining("Format", "'{0:0.00}%'", nameof(ChartSegment.Percentage));

                bindingSet.Bind(TotalTimeLabel)
                .ByCombining(durationCombiner,
                             vm => vm.TrackedTime,
                             vm => vm.DurationFormat);

                bindingSet.Bind(ClientLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasClient)
                .WithConversion(visibilityConverter);

                // Color
                bindingSet.Bind(ProjectLabel)
                .For(v => v.TextColor)
                .To(vm => vm.Color)
                .WithConversion(colorConverter);

                bindingSet.Bind(CircleView)
                .For(v => v.BackgroundColor)
                .To(vm => vm.Color)
                .WithConversion(colorConverter);

                bindingSet.Apply();
            });
        }
コード例 #11
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            CurrentTimeEntryCard.Layer.BorderWidth  = 1;
            CurrentTimeEntryCard.Layer.CornerRadius = 8;
            CurrentTimeEntryCard.Layer.BorderColor  = Color.TimeEntriesLog.ButtonBorder.ToNativeColor().CGColor;
            CurrentTimeEntryElapsedTimeLabel.Font   = CurrentTimeEntryElapsedTimeLabel.Font.GetMonospacedDigitFont();

            StartTimeEntryButton.Transform = CGAffineTransform.MakeScale(0.01f, 0.01f);
            reportsButton.SetImage(UIImage.FromBundle("icReports"), UIControlState.Normal);
            settingsButton.SetImage(UIImage.FromBundle("icSettings"), UIControlState.Normal);

            var visibilityConverter         = new MvxVisibilityValueConverter();
            var timeSpanConverter           = new TimeSpanToDurationValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();

            var bindingSet = this.CreateBindingSet <MainViewController, MainViewModel>();

            //Commands
            bindingSet.Bind(settingsButton).To(vm => vm.OpenSettingsCommand);
            bindingSet.Bind(StopTimeEntryButton).To(vm => vm.StopTimeEntryCommand);
            bindingSet.Bind(StartTimeEntryButton).To(vm => vm.StartTimeEntryCommand);
            bindingSet.Bind(EditTimeEntryButton).To(vm => vm.EditTimeEntryCommand);
            bindingSet.Bind(CurrentTimeEntryCard)
            .For(v => v.BindTap())
            .To(vm => vm.EditTimeEntryCommand);

            //Visibility
            bindingSet.Bind(CurrentTimeEntryCard)
            .For(v => v.BindVisibility())
            .To(vm => vm.CurrentlyRunningTimeEntry)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(StartTimeEntryButton)
            .For(v => v.BindVisibility())
            .To(vm => vm.CurrentlyRunningTimeEntry)
            .WithConversion(invertedVisibilityConverter);

            //Text
            bindingSet.Bind(CurrentTimeEntryDescriptionLabel).To(vm => vm.CurrentlyRunningTimeEntry.Description);

            bindingSet.Bind(CurrentTimeEntryElapsedTimeLabel)
            .To(vm => vm.CurrentTimeEntryElapsedTime)
            .WithConversion(timeSpanConverter);

            bindingSet.Apply();
        }
コード例 #12
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            ContentView.BackgroundColor = UIColor.White;
            FadeView.FadeRight          = true;

            StartButton.TouchUpInside += onStartButtonTap;

            this.DelayBind(() =>
            {
                var colorConverter      = new MvxRGBValueConverter();
                var visibilityConverter = new MvxVisibilityValueConverter();
                var timeSpanConverter   = new TimeSpanToDurationValueConverter();
                var descriptionTopDistanceValueConverter = new BoolToConstantValueConverter <nfloat>(HasProjectDistance, NoProjectDistance);
                var projectTaskClientCombiner            = new ProjectTaskClientValueCombiner(
                    ProjectTaskClientLabel.Font.CapHeight,
                    Color.Suggestions.ClientColor.ToNativeColor(),
                    true
                    );

                var bindingSet = this.CreateBindingSet <SuggestionsViewCell, Suggestion>();

                //Text
                bindingSet.Bind(DescriptionLabel).To(vm => vm.Description);
                bindingSet.Bind(ProjectTaskClientLabel)
                .For(v => v.AttributedText)
                .ByCombining(projectTaskClientCombiner,
                             v => v.ProjectName,
                             v => v.TaskName,
                             v => v.ClientName,
                             v => v.ProjectColor);

                //Visibility
                bindingSet.Bind(DescriptionTopDistanceConstraint)
                .For(v => v.Constant)
                .To(vm => vm.HasProject)
                .WithConversion(descriptionTopDistanceValueConverter);

                bindingSet.Bind(ProjectTaskClientLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Apply();
            });
        }
コード例 #13
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            //Empty state button config
            EmptyStateButton.Layer.BorderWidth = 1;
            EmptyStateButton.Layer.BorderColor = Color.TimeEntriesLog.ButtonBorder.ToNativeColor().CGColor;
            EmptyStateButton.SetTitle(Resources.TimeEntriesLogEmptyStateButton, UIControlState.Normal);

            //TableView config
            var source = new GroupBindingTableViewSource <DateTime, ITimeEntry>(
                TimeEntriesTableView, nameof(TimeEntriesLogHeaderViewCell), nameof(TimeEntriesLogViewCell)
                );

            TimeEntriesTableView.Source = source;

            //Converters
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();

            var bindingSet = this.CreateBindingSet <TimeEntriesLogViewController, TimeEntriesLogViewModel>();

            //Text
            bindingSet.Bind(EmptyStateTextLabel).To(vm => vm.EmptyStateText);
            bindingSet.Bind(EmptyStateTitleLabel).To(vm => vm.EmptyStateTitle);

            //Time entries log
            bindingSet.Bind(source).To(vm => vm.TimeEntries);

            //Visibility
            bindingSet.Bind(EmptyStateView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsEmpty)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(EmptyStateButton)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsWelcome)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(TimeEntriesTableView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsEmpty)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Apply();
        }
コード例 #14
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            ClientNameLabel.LineBreakMode  = UILineBreakMode.TailTruncation;
            ProjectNameLabel.LineBreakMode = UILineBreakMode.TailTruncation;

            this.DelayBind(() =>
            {
                var colorConverter      = new MvxRGBValueConverter();
                var taskCountConverter  = new TaskCountConverter();
                var visibilityConverter = new MvxVisibilityValueConverter();

                var bindingSet = this.CreateBindingSet <StartTimeEntryProjectsViewCell, ProjectSuggestionViewModel>();

                //Text
                bindingSet.Bind(ProjectNameLabel).To(vm => vm.ProjectName);
                bindingSet.Bind(ClientNameLabel).To(vm => vm.ClientName);
                bindingSet.Bind(AmountOfTasksLabel)
                .To(vm => vm.NumberOfTasks)
                .WithConversion(taskCountConverter);

                //Color
                bindingSet.Bind(ProjectNameLabel)
                .For(v => v.TextColor)
                .To(vm => vm.ProjectColor)
                .WithConversion(colorConverter);

                bindingSet.Bind(ProjectDotView)
                .For(v => v.BackgroundColor)
                .To(vm => vm.ProjectColor)
                .WithConversion(colorConverter);

                //Visibility
                bindingSet.Bind(ToggleTaskImage)
                .For(v => v.BindVisibility())
                .To(vm => vm.NumberOfTasks)
                .WithConversion(visibilityConverter);

                bindingSet.Apply();
            });
        }
コード例 #15
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            this.DelayBind(() =>
            {
                var visibilityConverter = new MvxVisibilityValueConverter();

                var bindingSet = this.CreateBindingSet <CountryViewCell, SelectableCountryViewModel>();

                bindingSet.Bind(NameLabel).To(vm => vm.Country.Name);

                bindingSet.Bind(CheckBoxImageView)
                .For(v => v.BindVisibility())
                .To(vm => vm.Selected)
                .WithConversion(visibilityConverter);

                bindingSet.Apply();
            });
        }
コード例 #16
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            this.DelayBind(() =>
            {
                var visibilityConverter = new MvxVisibilityValueConverter();
                var descriptionTopDistanceValueConverter = new BoolToConstantValueConverter <nfloat>(HasProjectDistance, NoProjectDistance);
                var projectTaskClientCombiner            = new ProjectTaskClientValueCombiner(
                    ProjectLabel.Font.CapHeight,
                    Color.Suggestions.ClientColor.ToNativeColor(),
                    true
                    );

                var bindingSet = this.CreateBindingSet <StartTimeEntryViewCell, TimeEntrySuggestion>();

                //Text
                bindingSet.Bind(DescriptionLabel).To(vm => vm.Description);

                bindingSet.Bind(ProjectLabel)
                .For(v => v.AttributedText)
                .ByCombining(projectTaskClientCombiner,
                             v => v.ProjectName,
                             v => v.TaskName,
                             v => v.ClientName,
                             v => v.ProjectColor);

                //Visibility
                bindingSet.Bind(DescriptionTopDistanceConstraint)
                .For(v => v.Constant)
                .To(vm => vm.HasProject)
                .WithConversion(descriptionTopDistanceValueConverter);

                bindingSet.Bind(ProjectLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Apply();
            });
        }
コード例 #17
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();

            Title = ViewModel.Title;

            var inverseBoolConverter            = new BoolToConstantValueConverter <bool>(false, true);
            var visibilityConverter             = new MvxVisibilityValueConverter();
            var durationFormatToStringConverter = new DurationFormatToStringValueConverter();

            var bindingSet = this.CreateBindingSet <SettingsViewController, SettingsViewModel>();

            // Text
            bindingSet.Bind(EmailLabel).To(vm => vm.Email);
            bindingSet.Bind(WorkspaceLabel).To(vm => vm.WorkspaceName);
            bindingSet.Bind(DateFormatLabel).To(vm => vm.DateFormat.Localized);
            bindingSet.Bind(DurationFormatLabel)
            .To(vm => vm.DurationFormat)
            .WithConversion(durationFormatToStringConverter);
            bindingSet.Bind(BeginningOfWeekLabel).To(vm => vm.BeginningOfWeek);
            bindingSet.Bind(VersionLabel).To(vm => vm.Version);

            // Commands
            bindingSet.Bind(LogoutButton).To(vm => vm.LogoutCommand);
            bindingSet.Bind(EmailView)
            .For(v => v.BindTap())
            .To(vm => vm.EditProfileCommand);

            bindingSet.Bind(DateFormatView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectDateFormatCommand);

            bindingSet.Bind(DurationFormatView)
            .For(verticalSpacing => verticalSpacing.BindTap())
            .To(vm => vm.SelectDurationFormatCommand);

            bindingSet.Bind(WorkspaceView)
            .For(v => v.BindTap())
            .To(vm => vm.PickWorkspaceCommand);

            bindingSet.Bind(ManualModeView)
            .For(v => v.BindTap())
            .To(vm => vm.ToggleManualModeCommand);

            bindingSet.Bind(TwentyFourHourClockView)
            .For(v => v.BindTap())
            .To(vm => vm.ToggleUseTwentyFourHourClockCommand);

            bindingSet.Bind(TwentyFourHourClockSwitch)
            .For(v => v.BindValueChanged())
            .To(vm => vm.ToggleUseTwentyFourHourClockCommand);

            bindingSet.Bind(BeginningOfWeekView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectBeginningOfWeekCommand);

            bindingSet.Bind(FeedbackView)
            .For(v => v.BindTap())
            .To(vm => vm.SubmitFeedbackCommand);

            bindingSet.Bind(AboutView)
            .For(v => v.BindTap())
            .To(vm => vm.AboutCommand);

            // Logout process
            bindingSet.Bind(LogoutButton)
            .For(btn => btn.Enabled)
            .To(vm => vm.IsLoggingOut)
            .WithConversion(inverseBoolConverter);

            bindingSet.Bind(NavigationItem)
            .For(nav => nav.BindHidesBackButton())
            .To(vm => vm.IsLoggingOut);

            bindingSet.Bind(SyncingView)
            .For(view => view.BindVisibility())
            .To(vm => vm.IsRunningSync)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(SyncedView)
            .For(view => view.BindVisibility())
            .To(vm => vm.IsSynced)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(LoggingOutView)
            .For(view => view.BindVisibility())
            .To(vm => vm.IsLoggingOut)
            .WithConversion(visibilityConverter);

            // Switches
            bindingSet.Bind(TwentyFourHourClockSwitch)
            .For(v => v.BindAnimatedOn())
            .To(vm => vm.UseTwentyFourHourClock);

            bindingSet.Bind(ManualModeSwitch)
            .For(v => v.BindAnimatedOn())
            .To(vm => vm.IsManualModeEnabled);

            bindingSet.Apply();

            willEnterForegroundNotification = UIApplication.Notifications.ObserveWillEnterForeground((sender, e) => startAnimations());
        }
コード例 #18
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            FadeView.FadeRight = true;

            TimeLabel.Font = TimeLabel.Font.GetMonospacedDigitFont();
            ContinueButton.TouchUpInside += onContinueButtonTap;

            this.DelayBind(() =>
            {
                var colorConverter              = new MvxRGBValueConverter();
                var visibilityConverter         = new MvxVisibilityValueConverter();
                var timeSpanConverter           = new TimeSpanToDurationValueConverter();
                var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();
                var projectTaskClientCombiner   = new ProjectTaskClientValueCombiner(
                    ProjectTaskClientLabel.Font.CapHeight,
                    Color.TimeEntriesLog.ClientColor.ToNativeColor(),
                    true
                    );
                var descriptionTopDistanceValueConverter =
                    new BoolToConstantValueConverter <nfloat>(hasProjectDistance, noProjectDistance);

                var bindingSet = this.CreateBindingSet <TimeEntriesLogViewCell, TimeEntryViewModel>();

                //Text
                bindingSet.Bind(DescriptionLabel).To(vm => vm.Description);
                bindingSet.Bind(ProjectTaskClientLabel)
                .For(v => v.AttributedText)
                .ByCombining(projectTaskClientCombiner,
                             v => v.ProjectName,
                             v => v.TaskName,
                             v => v.ClientName,
                             v => v.ProjectColor);

                bindingSet.Bind(TimeLabel)
                .To(vm => vm.Duration)
                .WithConversion(timeSpanConverter);

                //Visibility
                bindingSet.Bind(DescriptionTopDistanceConstraint)
                .For(v => v.Constant)
                .To(vm => vm.HasProject)
                .WithConversion(descriptionTopDistanceValueConverter);

                bindingSet.Bind(ProjectTaskClientLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasProject)
                .WithConversion(visibilityConverter);

                bindingSet.Bind(AddDescriptionLabel)
                .For(v => v.BindVisibility())
                .To(vm => vm.HasDescription)
                .WithConversion(invertedVisibilityConverter);

                bindingSet.Bind(AddDescriptionTopDistanceConstraint)
                .For(v => v.Constant)
                .To(vm => vm.HasProject)
                .WithConversion(descriptionTopDistanceValueConverter);

                bindingSet.Bind(SyncErrorImageView)
                .For(v => v.BindVisibility())
                .To(vm => vm.CanSync)
                .WithConversion(invertedVisibilityConverter);

                bindingSet.Bind(UnsyncedImageView)
                .For(v => v.BindVisibility())
                .To(vm => vm.NeedsSync)
                .WithConversion(visibilityConverter);

                bindingSet.Bind(ContinueButton)
                .For(v => v.BindVisibility())
                .To(vm => vm.CanSync)
                .WithConversion(visibilityConverter);

                bindingSet.Bind(ContinueImageView)
                .For(v => v.BindVisibility())
                .To(vm => vm.CanSync)
                .WithConversion(visibilityConverter);

                bindingSet.Apply();
            });
        }
コード例 #19
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();

            var colorConverter              = new MvxNativeColorValueConverter();
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var timeSpanConverter           = new TimeSpanToDurationValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();
            var projectTaskClientCombiner   = new ProjectTaskClientValueCombiner(
                CurrentTimeEntryProjectTaskClientLabel.Font.CapHeight,
                Color.Main.CurrentTimeEntryClientColor.ToNativeColor(),
                true
                );

            var bindingSet = this.CreateBindingSet <MainViewController, MainViewModel>();

            //Commands
            bindingSet.Bind(settingsButton).To(vm => vm.OpenSettingsCommand);
            bindingSet.Bind(StopTimeEntryButton).To(vm => vm.StopTimeEntryCommand);
            bindingSet.Bind(StartTimeEntryButton).To(vm => vm.StartTimeEntryCommand);
            bindingSet.Bind(EditTimeEntryButton).To(vm => vm.EditTimeEntryCommand);
            bindingSet.Bind(MainPagedScrollView)
            .For(v => v.RefreshCommand)
            .To(vm => vm.RefreshCommand);

            bindingSet.Bind(CurrentTimeEntryCard)
            .For(v => v.BindTap())
            .To(vm => vm.EditTimeEntryCommand);

            //Visibility
            bindingSet.Bind(CurrentTimeEntryCard)
            .For(v => v.BindVisibility())
            .To(vm => vm.HasCurrentTimeEntry)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(StartTimeEntryButton)
            .For(v => v.BindVisibility())
            .To(vm => vm.HasCurrentTimeEntry)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(SpiderBroImageView)
            .For(v => v.BindVisibility())
            .To(vm => vm.SpiderIsVisible)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(SpiderHinge)
            .For(v => v.BindVisibility())
            .To(vm => vm.SpiderIsVisible)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(SyncIndicatorView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsSyncing)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(MainPagedScrollView)
            .For(v => v.IsSyncing)
            .To(vm => vm.IsSyncing);

            //Text
            bindingSet.Bind(CurrentTimeEntryDescriptionLabel).To(vm => vm.CurrentTimeEntryDescription);
            bindingSet.Bind(CurrentTimeEntryElapsedTimeLabel)
            .To(vm => vm.CurrentTimeEntryElapsedTime)
            .WithConversion(timeSpanConverter);

            bindingSet.Bind(CurrentTimeEntryProjectTaskClientLabel)
            .For(v => v.AttributedText)
            .ByCombining(projectTaskClientCombiner,
                         v => v.CurrentTimeEntryProject,
                         v => v.CurrentTimeEntryTask,
                         v => v.CurrentTimeEntryClient,
                         v => v.CurrentTimeEntryProjectColor);

            bindingSet.Apply();
        }
コード例 #20
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();

            Title = ViewModel.Title;

            var inverseBoolConverter = new BoolToConstantValueConverter <bool>(false, true);
            var visibilityConverter  = new MvxVisibilityValueConverter();

            var bindingSet = this.CreateBindingSet <SettingsViewController, SettingsViewModel>();

            // Text
            bindingSet.Bind(EmailLabel).To(vm => vm.Email);
            bindingSet.Bind(VersionLabel).To(vm => vm.Version);
            bindingSet.Bind(PlanLabel).To(vm => vm.CurrentPlan);
            bindingSet.Bind(WorkspaceLabel).To(vm => vm.WorkspaceName);

            // Commands
            bindingSet.Bind(LogoutButton).To(vm => vm.LogoutCommand);
            bindingSet.Bind(EmailView)
            .For(v => v.BindTap())
            .To(vm => vm.EditProfileCommand);

            bindingSet.Bind(WorkspaceView)
            .For(v => v.BindTap())
            .To(vm => vm.EditWorkspaceCommand);

            bindingSet.Bind(SubscriptionView)
            .For(v => v.BindTap())
            .To(vm => vm.EditSubscriptionCommand);

            bindingSet.Bind(TwentyFourHourClockView)
            .For(v => v.BindTap())
            .To(vm => vm.ToggleUseTwentyFourHourClockCommand);

            bindingSet.Bind(AddMobileTagView)
            .For(v => v.BindTap())
            .To(vm => vm.ToggleAddMobileTagCommand);

            bindingSet.Bind(FeedbackView)
            .For(v => v.BindTap())
            .To(vm => vm.SubmitFeedbackCommand);

            bindingSet.Bind(RateView)
            .For(v => v.BindTap())
            .To(vm => vm.RateCommand);

            bindingSet.Bind(UpdateView)
            .For(v => v.BindTap())
            .To(vm => vm.UpdateCommand);

            bindingSet.Bind(HelpView)
            .For(v => v.BindTap())
            .To(vm => vm.HelpCommand);

            // Logout process
            bindingSet.Bind(LogoutButton)
            .For(btn => btn.Enabled)
            .To(vm => vm.IsLoggingOut)
            .WithConversion(inverseBoolConverter);

            bindingSet.Bind(NavigationItem)
            .For(nav => nav.BindHidesBackButton())
            .To(vm => vm.IsLoggingOut);

            bindingSet.Bind(SyncingView)
            .For(view => view.BindVisibility())
            .To(vm => vm.IsRunningSync)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(SyncedView)
            .For(view => view.BindVisibility())
            .To(vm => vm.IsSynced)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(LoggingOutView)
            .For(view => view.BindVisibility())
            .To(vm => vm.IsLoggingOut)
            .WithConversion(visibilityConverter);

            // Switches
            bindingSet.Bind(AddMobileTagSwitch)
            .For(v => v.BindAnimatedOn())
            .To(vm => vm.AddMobileTag);

            bindingSet.Bind(TwentyFourHourClockSwitch)
            .For(v => v.BindAnimatedOn())
            .To(vm => vm.UseTwentyFourHourClock);

            bindingSet.Apply();
        }
コード例 #21
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            //TableView config
            var source = new TimeEntriesLogViewSource(TimeEntriesTableView);

            TimeEntriesTableView.Source = source;

            //Add negative bottom inset, so that footers won't stick to the bottom of the screen
            var bottomContentInset = -source.GetHeightForFooter(TimeEntriesTableView, 0);

            if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
            {
                var bottomSafeAreaInset = UIApplication.SharedApplication.KeyWindow.SafeAreaInsets.Bottom;
                bottomContentInset -= bottomSafeAreaInset;
            }
            var tableViewContentInset = TimeEntriesTableView.ContentInset;

            tableViewContentInset.Bottom      = bottomContentInset;
            TimeEntriesTableView.ContentInset = tableViewContentInset;

            //Converters
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();

            var bindingSet = this.CreateBindingSet <TimeEntriesLogViewController, TimeEntriesLogViewModel>();

            //Text
            bindingSet.Bind(EmptyStateTextLabel).To(vm => vm.EmptyStateText);
            bindingSet.Bind(EmptyStateTitleLabel).To(vm => vm.EmptyStateTitle);

            //Time entries log
            bindingSet.Bind(source).To(vm => vm.TimeEntries);

            //Visibility
            bindingSet.Bind(EmptyStateView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsEmpty)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(TimeEntriesTableView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsEmpty)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(EmptyStateImageView)
            .For(v => v.BindVisibility())
            .To($"{nameof(TimeEntriesLogViewModel.IsEmpty)}&&!{nameof(TimeEntriesLogViewModel.IsWelcome)}")
            .WithConversion(visibilityConverter);

            bindingSet.Bind(WelcomeImageView)
            .For(v => v.BindVisibility())
            .To($"{nameof(TimeEntriesLogViewModel.IsEmpty)}&&{nameof(TimeEntriesLogViewModel.IsWelcome)}")
            .WithConversion(visibilityConverter);

            //Commands
            bindingSet.Bind(source)
            .For(s => s.SelectionChangedCommand)
            .To(vm => vm.EditCommand);

            bindingSet.Bind(source)
            .For(v => v.ContinueTimeEntryCommand)
            .To(vm => vm.ContinueTimeEntryCommand);


            bindingSet.Bind(source)
            .For(v => v.DeleteTimeEntryCommand)
            .To(vm => vm.DeleteCommand);

            bindingSet.Apply();
        }
コード例 #22
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            setupDismissingByTappingOnBackground();
            prepareViews();

            var durationCombiner            = new DurationValueCombiner();
            var dateCombiner                = new DateTimeOffsetDateFormatValueCombiner(TimeZoneInfo.Local);
            var timeCombiner                = new DateTimeOffsetTimeFormatValueCombiner(TimeZoneInfo.Local);
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var invertedBoolConverter       = new BoolToConstantValueConverter <bool>(false, true);
            var inverterVisibilityConverter = new MvxInvertedVisibilityValueConverter();
            var projectTaskClientCombiner   = new ProjectTaskClientValueCombiner(
                ProjectTaskClientLabel.Font.CapHeight,
                Color.EditTimeEntry.ClientText.ToNativeColor(),
                false
                );
            var stopRunningTimeEntryAndEditDurationForStoppedConverter = new BoolToConstantValueConverter <IMvxCommand>(
                ViewModel.StopCommand, ViewModel.EditDurationCommand);

            var bindingSet = this.CreateBindingSet <EditTimeEntryViewController, EditTimeEntryViewModel>();

            //Error message view
            bindingSet.Bind(ErrorMessageLabel)
            .For(v => v.Text)
            .To(vm => vm.SyncErrorMessage);

            bindingSet.Bind(ErrorView)
            .For(v => v.BindTap())
            .To(vm => vm.DismissSyncErrorMessageCommand);

            bindingSet.Bind(ErrorView)
            .For(v => v.BindVisible())
            .To(vm => vm.SyncErrorMessageVisible)
            .WithConversion(inverterVisibilityConverter);

            //Text
            bindingSet.Bind(DescriptionTextView)
            .For(v => v.RemainingLength)
            .To(vm => vm.DescriptionRemainingLength);

            bindingSet.Bind(DescriptionTextView)
            .For(v => v.BindText())
            .To(vm => vm.Description);

            bindingSet.Bind(BillableSwitch)
            .For(v => v.BindAnimatedOn())
            .To(vm => vm.Billable);

            bindingSet.Bind(DurationLabel)
            .ByCombining(durationCombiner,
                         vm => vm.Duration,
                         vm => vm.DurationFormat);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.AttributedText)
            .ByCombining(projectTaskClientCombiner,
                         v => v.Project,
                         v => v.Task,
                         v => v.Client,
                         v => v.ProjectColor);

            bindingSet.Bind(StartDateLabel)
            .ByCombining(dateCombiner,
                         vm => vm.StartTime,
                         vm => vm.DateFormat);

            bindingSet.Bind(StartTimeLabel)
            .ByCombining(timeCombiner,
                         vm => vm.StartTime,
                         vm => vm.TimeFormat);

            bindingSet.Bind(EndTimeLabel)
            .ByCombining(timeCombiner,
                         vm => vm.StopTime,
                         vm => vm.TimeFormat);

            //Commands
            bindingSet.Bind(CloseButton).To(vm => vm.CloseCommand);
            bindingSet.Bind(DeleteButton).To(vm => vm.DeleteCommand);
            bindingSet.Bind(ConfirmButton).To(vm => vm.ConfirmCommand);

            bindingSet.Bind(DurationView)
            .For(v => v.BindTap())
            .To(vm => vm.EditDurationCommand);

            bindingSet.Bind(StartTimeView)
            .For(v => v.BindTap())
            .To(vm => vm.EditDurationCommand);

            bindingSet.Bind(StopButton)
            .To(vm => vm.StopCommand);

            bindingSet.Bind(EndTimeView)
            .For(v => v.BindTap())
            .To(vm => vm.IsTimeEntryRunning)
            .WithConversion(stopRunningTimeEntryAndEditDurationForStoppedConverter);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.BindTap())
            .To(vm => vm.SelectProjectCommand);

            bindingSet.Bind(AddProjectAndTaskView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectProjectCommand);

            bindingSet.Bind(StartDateView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectStartDateCommand);

            bindingSet.Bind(TagsTextView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectTagsCommand);

            bindingSet.Bind(AddTagsView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectTagsCommand);

            bindingSet.Bind(BillableView)
            .For(v => v.BindTap())
            .To(vm => vm.ToggleBillableCommand);

            //End time and the stop button visibility
            bindingSet.Bind(StopButton)
            .For(v => v.BindVisible())
            .To(vm => vm.IsTimeEntryRunning)
            .WithConversion(inverterVisibilityConverter);

            bindingSet.Bind(EndTimeLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.IsTimeEntryRunning)
            .WithConversion(visibilityConverter);

            //Project visibility
            bindingSet.Bind(AddProjectAndTaskView)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(inverterVisibilityConverter);

            //Tags visibility
            bindingSet.Bind(AddTagsView)
            .For(v => v.BindVisible())
            .To(vm => vm.HasTags)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(TagsTextView)
            .For(v => v.BindVisible())
            .To(vm => vm.HasTags)
            .WithConversion(inverterVisibilityConverter);

            //Confirm button enabled
            bindingSet.Bind(ConfirmButton)
            .For(v => v.Enabled)
            .To(vm => vm.DescriptionLimitExceeded)
            .WithConversion(invertedBoolConverter);

            bindingSet.Bind(ConfirmButton)
            .For(v => v.Alpha)
            .To(vm => vm.DescriptionLimitExceeded)
            .WithConversion(new BoolToConstantValueConverter <nfloat>(0.5f, 1));

            bindingSet.Bind(BillableView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsBillableAvailable)
            .WithConversion(visibilityConverter);

            bindingSet.Apply();
        }
コード例 #23
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            preparePlaceholders();

            if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
            {
                var navigationBarHeight = NavigationController.NavigationBar.Frame.Height;
                AdditionalSafeAreaInsets = new UIEdgeInsets(-navigationBarHeight, 0, 0, 0);
            }

            PageControl.Pages    = ViewModel.NumberOfPages;
            FirstPageLabel.Text  = Resources.OnboardingTrackPageCopy;
            SecondPageLabel.Text = Resources.OnboardingMostUsedPageCopy;
            ThirdPageLabel.Text  = Resources.OnboardingReportsPageCopy;

            var visibilityConverter         = new MvxVisibilityValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();
            var colorConverter = new MvxNativeColorValueConverter();
            var bindingSet     = this.CreateBindingSet <OnboardingViewController, OnboardingViewModel>();

            var pagedBackgroundImageColorConverter = new PaginationValueConverter <UIImage>(new[]
            {
                UIImage.FromBundle("bgNoiseBlue"),
                UIImage.FromBundle("bgNoisePurple"),
                UIImage.FromBundle("bgNoiseYellow"),
                UIImage.FromBundle("bgNoiseBlue")
            });

            //Commands
            bindingSet.Bind(Skip).To(vm => vm.SkipCommand);
            bindingSet.Bind(Next).To(vm => vm.NextCommand);
            bindingSet.Bind(Login).To(vm => vm.LoginCommand);
            bindingSet.Bind(SignUp).To(vm => vm.SignUpCommand);
            bindingSet.Bind(Previous).To(vm => vm.PreviousCommand);

            //Color
            bindingSet.Bind(View)
            .For(v => v.BindAnimatedBackground())
            .To(vm => vm.BackgroundColor)
            .WithConversion(colorConverter);

            bindingSet.Bind(PhoneFrame)
            .For(v => v.BindAnimatedBackground())
            .To(vm => vm.BorderColor)
            .WithConversion(colorConverter);

            //Noise image
            bindingSet.Bind(BackgroundImage)
            .For(v => v.BindAnimatedImage())
            .To(vm => vm.CurrentPage)
            .WithConversion(pagedBackgroundImageColorConverter);

            //Visibility
            bindingSet.Bind(PhoneContents)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(LastPageItems)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(Next)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(ScrollView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(Skip)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(Previous)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsFirstPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(trackPagePlaceholder)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsTrackPage)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(mostUsedPagePlaceholder)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsMostUsedPage)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(reportsPagePlaceholder)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsSummaryPage)
            .WithConversion(visibilityConverter);


            //Current Page
            bindingSet.Bind(ScrollView)
            .For(v => v.BindAnimatedCurrentPage())
            .To(vm => vm.CurrentPage);

            bindingSet.Bind(PageControl)
            .For(v => v.CurrentPage)
            .To(vm => vm.CurrentPage);

            bindingSet.Apply();
        }
コード例 #24
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            PageControl.Pages    = ViewModel.NumberOfPages;
            FirstPageLabel.Text  = Resources.OnboardingTrackPageCopy;
            SecondPageLabel.Text = Resources.OnboardingLogPageCopy;
            ThirdPageLabel.Text  = Resources.OnboardingSummaryPageCopy;

            var visibilityConverter         = new MvxVisibilityValueConverter();
            var invertedVisibilityConverter = new MvxInvertedVisibilityValueConverter();
            var colorConverter = new MvxNativeColorValueConverter();
            var bindingSet     = this.CreateBindingSet <OnboardingViewController, OnboardingViewModel>();

            //Commands
            bindingSet.Bind(Skip).To(vm => vm.SkipCommand);
            bindingSet.Bind(Next).To(vm => vm.NextCommand);
            bindingSet.Bind(Login).To(vm => vm.LoginCommand);
            bindingSet.Bind(SignUp).To(vm => vm.SignUpCommand);
            bindingSet.Bind(Previous).To(vm => vm.PreviousCommand);

            //Color
            bindingSet.Bind(View)
            .For(v => v.BindAnimatedBackground())
            .To(vm => vm.BackgroundColor)
            .WithConversion(colorConverter);

            bindingSet.Bind(PhoneFrame)
            .For(v => v.BindAnimatedBackground())
            .To(vm => vm.BorderColor)
            .WithConversion(colorConverter);

            //Visibility
            bindingSet.Bind(PhoneContents)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(LastPageItems)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(Next)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(ScrollView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(Skip)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsLastPage)
            .WithConversion(invertedVisibilityConverter);

            bindingSet.Bind(Previous)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsFirstPage)
            .WithConversion(invertedVisibilityConverter);

            //Current Page
            bindingSet.Bind(ScrollView)
            .For(v => v.BindCurrentPage())
            .To(vm => vm.CurrentPage);

            bindingSet.Bind(PageControl)
            .For(v => v.CurrentPage)
            .To(vm => vm.CurrentPage);

            bindingSet.Apply();
        }
コード例 #25
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();
            prepareOnboarding();
            setupTableViewHeader();

            var visibilityConverter       = new MvxVisibilityValueConverter();
            var projectTaskClientCombiner = new ProjectTaskClientValueCombiner(
                CurrentTimeEntryProjectTaskClientLabel.Font.CapHeight,
                Color.Main.CurrentTimeEntryClientColor.ToNativeColor(),
                true
                );
            var startTimeEntryButtonManualModeIconConverter = new BoolToConstantValueConverter <UIImage>(
                UIImage.FromBundle("manualIcon"),
                UIImage.FromBundle("playIcon")
                );
            var durationCombiner = new DurationValueCombiner();

            var bindingSet = this.CreateBindingSet <MainViewController, MainViewModel>();

            // Table view
            tableViewSource = new TimeEntriesLogViewSource(ViewModel.TimeEntries, TimeEntriesLogViewCell.Identifier);
            TimeEntriesLogTableView
            .Rx()
            .Bind(tableViewSource)
            .DisposedBy(disposeBag);

            this.Bind(tableViewSource.FirstCell, f =>
            {
                onFirstTimeEntryChanged(f);
                firstTimeEntryCell = f;
            });

            this.Bind(tableViewSource.ScrollOffset, onTableScroll);

            var continueTimeEntry = Observable.Merge(
                tableViewSource.ContinueTap,
                tableViewSource.SwipeToContinue
                );

            this.Bind(continueTimeEntry, ViewModel.ContinueTimeEntry);
            this.Bind(tableViewSource.SwipeToDelete, ViewModel.TimeEntriesViewModel.DelayDeleteTimeEntry);
            this.Bind(tableViewSource.ItemSelected, ViewModel.SelectTimeEntry);
            this.Bind(ViewModel.TimeEntriesViewModel.ShouldShowUndo, toggleUndoDeletion);

            tableViewSource.SwipeToContinue
            .VoidSubscribe(() =>
            {
                swipeRightStep.Dismiss();
            })
            .DisposedBy(disposeBag);

            tableViewSource.SwipeToDelete
            .VoidSubscribe(() =>
            {
                swipeLeftStep.Dismiss();
            })
            .DisposedBy(disposeBag);

            // Refresh Control
            var refreshControl = new RefreshControl(ViewModel.SyncProgressState, tableViewSource);

            this.Bind(refreshControl.Refresh, ViewModel.RefreshAction);
            TimeEntriesLogTableView.CustomRefreshControl = refreshControl;

            //Commands
            bindingSet.Bind(settingsButton).To(vm => vm.OpenSettingsCommand);
            bindingSet.Bind(StopTimeEntryButton).To(vm => vm.StopTimeEntryCommand);
            bindingSet.Bind(StartTimeEntryButton).To(vm => vm.StartTimeEntryCommand);
            bindingSet.Bind(EditTimeEntryButton).To(vm => vm.EditTimeEntryCommand);
            bindingSet.Bind(syncFailuresButton).To(vm => vm.OpenSyncFailuresCommand);

            bindingSet.Bind(CurrentTimeEntryCard)
            .For(v => v.BindTap())
            .To(vm => vm.EditTimeEntryCommand);

            bindingSet.Bind(suggestionsView)
            .For(v => v.SuggestionTappedCommad)
            .To(vm => vm.SuggestionsViewModel.StartTimeEntryCommand);

            bindingSet.Bind(StartTimeEntryButton)
            .For(v => v.BindLongPress())
            .To(vm => vm.AlternativeStartTimeEntryCommand);

            //Visibility
            var shouldWelcomeBack = ViewModel.ShouldShowWelcomeBack;

            this.Bind(ViewModel.ShouldShowEmptyState, visible => emptyStateView.Hidden = !visible);
            this.Bind(shouldWelcomeBack, WelcomeBackView.Rx().IsVisible());
            this.Bind(shouldWelcomeBack, spiderContainerView.Rx().IsVisible());
            this.Bind(shouldWelcomeBack, visible =>
            {
                if (visible)
                {
                    spiderBroView.Show();
                }
                else
                {
                    spiderBroView.Hide();
                }
            });

            //Text
            bindingSet.Bind(CurrentTimeEntryDescriptionLabel).To(vm => vm.CurrentTimeEntryDescription);

            bindingSet.Bind(CurrentTimeEntryElapsedTimeLabel)
            .ByCombining(durationCombiner,
                         vm => vm.CurrentTimeEntryElapsedTime,
                         vm => vm.CurrentTimeEntryElapsedTimeFormat);

            bindingSet.Bind(CurrentTimeEntryProjectTaskClientLabel)
            .For(v => v.AttributedText)
            .ByCombining(projectTaskClientCombiner,
                         v => v.CurrentTimeEntryProject,
                         v => v.CurrentTimeEntryTask,
                         v => v.CurrentTimeEntryClient,
                         v => v.CurrentTimeEntryProjectColor);

            //The start button
            bindingSet.Bind(StartTimeEntryButton)
            .For(v => v.BindImage())
            .To(vm => vm.IsInManualMode)
            .WithConversion(startTimeEntryButtonManualModeIconConverter);

            //The sync failures button
            bindingSet.Bind(syncFailuresButton)
            .For(v => v.BindVisibility())
            .To(vm => vm.NumberOfSyncFailures)
            .WithConversion(visibilityConverter);

            bindingSet.Apply();

            this.Bind(ViewModel.RatingViewModel.IsFeedbackSuccessViewShowing,
                      SendFeedbackSuccessView.Rx().AnimatedIsVisible());
            this.BindVoid(SendFeedbackSuccessView.Rx().Tap(), ViewModel.RatingViewModel.CloseFeedbackSuccessView);

            ViewModel.ShouldReloadTimeEntryLog
            .VoidSubscribe(reload)
            .DisposedBy(disposeBag);

            View.SetNeedsLayout();
            View.LayoutIfNeeded();

            NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.DidBecomeActiveNotification, onApplicationDidBecomeActive);
        }
コード例 #26
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();

            if (PresentationController is ModalPresentationController modalPresentationController)
            {
                syncErrorMessageView = EditTimeEntryErrorView.Create();
                var contentView = modalPresentationController.AdditionalContentView;

                contentView.AddSubview(syncErrorMessageView);

                syncErrorMessageView.TranslatesAutoresizingMaskIntoConstraints = false;
                syncErrorMessageView.TopAnchor
                .ConstraintEqualTo(contentView.TopAnchor, 28).Active = true;
                syncErrorMessageView.LeadingAnchor
                .ConstraintEqualTo(contentView.LeadingAnchor, 8).Active = true;
                syncErrorMessageView.TrailingAnchor
                .ConstraintEqualTo(contentView.TrailingAnchor, -8).Active = true;
            }

            var durationConverter           = new TimeSpanToDurationWithUnitValueConverter();
            var dateConverter               = new DateToTitleStringValueConverter();
            var timeConverter               = new DateTimeToTimeConverter();
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var inverterVisibilityConverter = new MvxInvertedVisibilityValueConverter();
            var projectTaskClientCombiner   = new ProjectTaskClientValueCombiner(
                ProjectTaskClientLabel.Font.CapHeight,
                Color.EditTimeEntry.ClientText.ToNativeColor(),
                false
                );

            var bindingSet = this.CreateBindingSet <EditTimeEntryViewController, EditTimeEntryViewModel>();

            if (syncErrorMessageView != null)
            {
                bindingSet.Bind(syncErrorMessageView)
                .For(v => v.Text)
                .To(vm => vm.SyncErrorMessage);

                bindingSet.Bind(syncErrorMessageView)
                .For(v => v.BindTap())
                .To(vm => vm.DismissSyncErrorMessageCommand);

                bindingSet.Bind(syncErrorMessageView)
                .For(v => v.CloseCommand)
                .To(vm => vm.DismissSyncErrorMessageCommand);

                bindingSet.Bind(syncErrorMessageView)
                .For(v => v.BindVisible())
                .To(vm => vm.SyncErrorMessageVisible)
                .WithConversion(inverterVisibilityConverter);
            }

            //Text
            bindingSet.Bind(DescriptionTextField).To(vm => vm.Description);

            bindingSet.Bind(BillableSwitch)
            .For(v => v.BindAnimatedOn())
            .To(vm => vm.Billable);

            bindingSet.Bind(DurationLabel)
            .To(vm => vm.Duration)
            .WithConversion(durationConverter);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.AttributedText)
            .ByCombining(projectTaskClientCombiner,
                         v => v.Project,
                         v => v.Task,
                         v => v.Client,
                         v => v.ProjectColor);

            bindingSet.Bind(StartDateLabel)
            .To(vm => vm.StartTime)
            .WithConversion(dateConverter);

            bindingSet.Bind(StartTimeLabel)
            .To(vm => vm.StartTime)
            .WithConversion(timeConverter);

            bindingSet.Bind(TagsLabel)
            .To(vm => vm.Tags)
            .WithConversion(new CollectionToStringValueConverter <string>());

            //Commands
            bindingSet.Bind(CloseButton).To(vm => vm.CloseCommand);
            bindingSet.Bind(DeleteButton).To(vm => vm.DeleteCommand);
            bindingSet.Bind(ConfirmButton).To(vm => vm.ConfirmCommand);
            bindingSet.Bind(DurationLabel)
            .For(v => v.BindTap())
            .To(vm => vm.EditDurationCommand);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.BindTap())
            .To(vm => vm.SelectProjectCommand);

            bindingSet.Bind(AddProjectAndTaskView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectProjectCommand);

            bindingSet.Bind(StartDateTimeView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectStartDateTimeCommand);

            bindingSet.Bind(TagsLabel)
            .For(v => v.BindTap())
            .To(vm => vm.SelectTagsCommand);

            bindingSet.Bind(AddTagsView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectTagsCommand);

            bindingSet.Bind(BillableView)
            .For(v => v.BindTap())
            .To(vm => vm.ToggleBillableCommand);

            //Project visibility
            bindingSet.Bind(AddProjectAndTaskView)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(inverterVisibilityConverter);

            //Tags visibility
            bindingSet.Bind(AddTagsView)
            .For(v => v.BindVisible())
            .To(vm => vm.HasTags)
            .WithConversion(visibilityConverter);


            bindingSet.Bind(TagsLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.HasTags)
            .WithConversion(inverterVisibilityConverter);

            bindingSet.Apply();
        }
コード例 #27
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            TitleLabel.Text                  = Resources.Edit;
            BillableLabel.Text               = Resources.Billable;
            StartDateDescriptionLabel.Text   = Resources.Startdate;
            DurationDescriptionLabel.Text    = Resources.Duration;
            StartDescriptionLabel.Text       = Resources.Start;
            EndDescriptionLabel.Text         = Resources.End;
            ErrorMessageTitleLabel.Text      = Resources.Oops;
            AddProjectTaskLabel.Text         = Resources.AddProjectTask;
            CategorizeWithProjectsLabel.Text = Resources.CategorizeYourTimeWithProjects;
            AddTagsLabel.Text                = Resources.AddTags;
            DeleteButton.SetTitle(Resources.Delete, UIControlState.Normal);
            ConfirmButton.SetTitle(Resources.ConfirmChanges, UIControlState.Normal);

            prepareViews();
            prepareOnboarding();

            contentSizeChangedDisposable = ScrollViewContent.AddObserver(boundsKey, NSKeyValueObservingOptions.New, onContentSizeChanged);

            var durationCombiner            = new DurationValueCombiner();
            var dateCombiner                = new DateTimeOffsetDateFormatValueCombiner(TimeZoneInfo.Local);
            var timeCombiner                = new DateTimeOffsetTimeFormatValueCombiner(TimeZoneInfo.Local);
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var invertedBoolConverter       = new BoolToConstantValueConverter <bool>(false, true);
            var inverterVisibilityConverter = new MvxInvertedVisibilityValueConverter();
            var projectTaskClientCombiner   = new ProjectTaskClientValueCombiner(
                ProjectTaskClientLabel.Font.CapHeight,
                Color.EditTimeEntry.ClientText.ToNativeColor(),
                false
                );
            var stopRunningTimeEntryAndSelectStopTimeForStoppedConverter = new BoolToConstantValueConverter <IMvxCommand>(
                ViewModel.StopCommand, ViewModel.SelectStopTimeCommand);

            var isInaccessibleTextColorConverter = new BoolToConstantValueConverter <UIColor>(
                Color.Common.Disabled.ToNativeColor(),
                Color.Common.TextColor.ToNativeColor()
                );

            var showTagsCombiner = new ShowTagsValueCombiner();

            var bindingSet = this.CreateBindingSet <EditTimeEntryViewController, EditTimeEntryViewModel>();

            //Error message view
            bindingSet.Bind(ErrorMessageLabel)
            .For(v => v.Text)
            .To(vm => vm.SyncErrorMessage);

            bindingSet.Bind(ErrorView)
            .For(v => v.BindTap())
            .To(vm => vm.DismissSyncErrorMessageCommand);

            bindingSet.Bind(ErrorView)
            .For(v => v.BindVisible())
            .To(vm => vm.SyncErrorMessageVisible)
            .WithConversion(inverterVisibilityConverter);

            //Text
            bindingSet.Bind(RemainingCharacterCount)
            .To(vm => vm.DescriptionRemainingLength);

            bindingSet.Bind(RemainingCharacterCount)
            .For(v => v.BindVisible())
            .To(vm => vm.DescriptionLimitExceeded);

            bindingSet.Bind(DescriptionTextView)
            .For(v => v.BindText())
            .To(vm => vm.Description);

            bindingSet.Bind(DescriptionTextView)
            .For(v => v.BindDidBecomeFirstResponder())
            .To(vm => vm.StartEditingDescriptionCommand);

            bindingSet.Bind(DurationLabel)
            .ByCombining(durationCombiner,
                         vm => vm.Duration,
                         vm => vm.DurationFormat);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.AttributedText)
            .ByCombining(projectTaskClientCombiner,
                         v => v.Project,
                         v => v.Task,
                         v => v.Client,
                         v => v.ProjectColor);

            bindingSet.Bind(StartDateLabel)
            .ByCombining(dateCombiner,
                         vm => vm.StartTime,
                         vm => vm.DateFormat);

            bindingSet.Bind(StartTimeLabel)
            .ByCombining(timeCombiner,
                         vm => vm.StartTime,
                         vm => vm.TimeFormat);

            bindingSet.Bind(EndTimeLabel)
            .ByCombining(timeCombiner,
                         vm => vm.StopTime,
                         vm => vm.TimeFormat);

            //Commands
            bindingSet.Bind(CloseButton).To(vm => vm.CloseCommand);
            bindingSet.Bind(DeleteButton).To(vm => vm.DeleteCommand);
            bindingSet.Bind(ConfirmButton).To(vm => vm.SaveCommand);

            bindingSet.Bind(DurationView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectDurationCommand);

            bindingSet.Bind(StartTimeView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectStartTimeCommand);

            bindingSet.Bind(StopButton)
            .To(vm => vm.StopCommand);

            bindingSet.Bind(EndTimeView)
            .For(v => v.BindTap())
            .To(vm => vm.IsTimeEntryRunning)
            .WithConversion(stopRunningTimeEntryAndSelectStopTimeForStoppedConverter);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.BindTap())
            .To(vm => vm.SelectProjectCommand);

            bindingSet.Bind(AddProjectAndTaskView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectProjectCommand);

            bindingSet.Bind(StartDateView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectStartDateCommand);

            bindingSet.Bind(TagsTextView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectTagsCommand);

            bindingSet.Bind(AddTagsView)
            .For(v => v.BindTap())
            .To(vm => vm.SelectTagsCommand);

            bindingSet.Bind(BillableSwitch)
            .For(v => v.BindValueChanged())
            .To(vm => vm.ToggleBillableCommand);

            //End time and the stop button visibility
            bindingSet.Bind(StopButton)
            .For(v => v.BindVisible())
            .To(vm => vm.IsTimeEntryRunning)
            .WithConversion(inverterVisibilityConverter);

            bindingSet.Bind(EndTimeLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.IsTimeEntryRunning)
            .WithConversion(visibilityConverter);

            //Project visibility
            bindingSet.Bind(AddProjectAndTaskView)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(ProjectTaskClientLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(inverterVisibilityConverter);

            //Tags visibility
            bindingSet.Bind(AddTagsView)
            .For(v => v.BindVisible())
            .To(vm => vm.HasTags)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(TagsTextView)
            .For(v => v.BindVisible())
            .To(vm => vm.HasTags)
            .WithConversion(inverterVisibilityConverter);

            //Confirm button enabled
            bindingSet.Bind(ConfirmButton)
            .For(v => v.Enabled)
            .To(vm => vm.DescriptionLimitExceeded)
            .WithConversion(invertedBoolConverter);

            bindingSet.Bind(ConfirmButton)
            .For(v => v.Alpha)
            .To(vm => vm.DescriptionLimitExceeded)
            .WithConversion(new BoolToConstantValueConverter <nfloat>(0.5f, 1));

            bindingSet.Bind(BillableView)
            .For(v => v.BindVisibility())
            .To(vm => vm.IsBillableAvailable)
            .WithConversion(visibilityConverter);

            //Regarding inaccessible entries
            getLabelsToChangeColorWhenEditingInaccessibleEntry().ForEach(createTextColorBindingForInaccessibleEntries);

            bindingSet.Bind(DescriptionTextView)
            .For(v => v.TextColor)
            .To(vm => vm.IsInaccessible)
            .WithConversion(isInaccessibleTextColorConverter);

            bindingSet.Bind(DescriptionTextView)
            .For(v => v.UserInteractionEnabled)
            .To(vm => vm.IsInaccessible)
            .WithConversion(invertedBoolConverter);

            bindingSet.Bind(BillableSwitch)
            .For(v => v.Enabled)
            .To(vm => vm.IsInaccessible)
            .WithConversion(invertedBoolConverter);

            bindingSet.Bind(TagsContainerView)
            .For(v => v.Hidden)
            .ByCombining(showTagsCombiner,
                         vm => vm.IsInaccessible,
                         vm => vm.HasTags)
            .WithConversion(invertedBoolConverter);

            bindingSet.Bind(TagsSeparator)
            .For(v => v.Hidden)
            .ByCombining(showTagsCombiner,
                         vm => vm.IsInaccessible,
                         vm => vm.HasTags)
            .WithConversion(invertedBoolConverter);

            bindingSet.Apply();

            void createTextColorBindingForInaccessibleEntries(UILabel label)
            {
                bindingSet.Bind(label)
                .For(v => v.TextColor)
                .To(vm => vm.IsInaccessible)
                .WithConversion(isInaccessibleTextColorConverter);
            }
        }
コード例 #28
0
 public void Include(MvxVisibilityValueConverter converter)
 {
     converter.Convert(null, null, null, null);
     converter.ConvertBack(null, null, null, null);
 }
コード例 #29
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();

            source = new MainTableViewSource(TimeEntriesLogTableView);

            prepareOnboarding();

            var suggestionsView = new SuggestionsView();

            TimeEntriesLogTableView.TableHeaderView = suggestionsView;
            TimeEntriesLogTableView.Source          = source;

            suggestionsView.DataContext = ViewModel.SuggestionsViewModel;

            source.Initialize();

            var timeEntriesLogFooter = new UIView(
                new CGRect(0, 0, UIScreen.MainScreen.Bounds.Width, 64)
                );
            var colorConverter                = new MvxNativeColorValueConverter();
            var visibilityConverter           = new MvxVisibilityValueConverter();
            var parametricTimeSpanConverter   = new ParametricTimeSpanToDurationValueConverter();
            var invertedVisibilityConverter   = new MvxInvertedVisibilityValueConverter();
            var timeEntriesLogFooterConverter = new BoolToConstantValueConverter <UIView>(new UIView(), timeEntriesLogFooter);
            var projectTaskClientCombiner     = new ProjectTaskClientValueCombiner(
                CurrentTimeEntryProjectTaskClientLabel.Font.CapHeight,
                Color.Main.CurrentTimeEntryClientColor.ToNativeColor(),
                true
                );
            var startTimeEntryButtonManualModeIconConverter = new BoolToConstantValueConverter <UIImage>(
                UIImage.FromBundle("manualIcon"),
                UIImage.FromBundle("playIcon")
                );

            var bindingSet = this.CreateBindingSet <MainViewController, MainViewModel>();

            //Table view
            bindingSet.Bind(source)
            .For(v => v.ObservableCollection)
            .To(vm => vm.TimeEntriesLogViewModel.TimeEntries);

            bindingSet.Bind(source)
            .For(v => v.SyncProgress)
            .To(vm => vm.SyncingProgress);

            bindingSet.Bind(TimeEntriesLogTableView)
            .For(v => v.TableFooterView)
            .To(vm => vm.TimeEntriesLogViewModel.IsEmpty)
            .WithConversion(timeEntriesLogFooterConverter);

            //Commands
            bindingSet.Bind(reportsButton).To(vm => vm.OpenReportsCommand);
            bindingSet.Bind(settingsButton).To(vm => vm.OpenSettingsCommand);
            bindingSet.Bind(StopTimeEntryButton).To(vm => vm.StopTimeEntryCommand);
            bindingSet.Bind(StartTimeEntryButton).To(vm => vm.StartTimeEntryCommand);
            bindingSet.Bind(EditTimeEntryButton).To(vm => vm.EditTimeEntryCommand);

            bindingSet.Bind(CurrentTimeEntryCard)
            .For(v => v.BindTap())
            .To(vm => vm.EditTimeEntryCommand);

            bindingSet.Bind(source)
            .For(v => v.SelectionChangedCommand)
            .To(vm => vm.TimeEntriesLogViewModel.EditCommand);

            bindingSet.Bind(source)
            .For(v => v.ContinueTimeEntryCommand)
            .To(vm => vm.TimeEntriesLogViewModel.ContinueTimeEntryCommand);

            bindingSet.Bind(source)
            .For(v => v.RefreshCommand)
            .To(vm => vm.RefreshCommand);

            bindingSet.Bind(source)
            .For(v => v.DeleteTimeEntryCommand)
            .To(vm => vm.TimeEntriesLogViewModel.DeleteCommand);

            bindingSet.Bind(suggestionsView)
            .For(v => v.SuggestionTappedCommad)
            .To(vm => vm.SuggestionsViewModel.StartTimeEntryCommand);

            //Visibility
            bindingSet.Bind(WelcomeBackView)
            .For(v => v.BindVisibility())
            .To(vm => vm.ShouldShowWelcomeBack)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(spiderContainerView)
            .For(v => v.BindVisibility())
            .To(vm => vm.ShouldShowWelcomeBack)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(spiderBroView)
            .For(v => v.BindSpiderVisibility())
            .To(vm => vm.ShouldShowWelcomeBack);

            bindingSet.Bind(emptyStateView)
            .For(v => v.BindVisibility())
            .To(vm => vm.ShouldShowEmptyState)
            .WithConversion(visibilityConverter);

            //Text
            bindingSet.Bind(CurrentTimeEntryDescriptionLabel).To(vm => vm.CurrentTimeEntryDescription);
            bindingSet.Bind(CurrentTimeEntryElapsedTimeLabel)
            .To(vm => vm.CurrentTimeEntryElapsedTime)
            .WithConversion(parametricTimeSpanConverter, DurationFormat.Improved);

            bindingSet.Bind(CurrentTimeEntryProjectTaskClientLabel)
            .For(v => v.AttributedText)
            .ByCombining(projectTaskClientCombiner,
                         v => v.CurrentTimeEntryProject,
                         v => v.CurrentTimeEntryTask,
                         v => v.CurrentTimeEntryClient,
                         v => v.CurrentTimeEntryProjectColor);

            //The start button
            bindingSet.Bind(StartTimeEntryButton)
            .For(v => v.BindImage())
            .To(vm => vm.IsInManualMode)
            .WithConversion(startTimeEntryButtonManualModeIconConverter);

            bindingSet.Apply();

            View.SetNeedsLayout();
            View.LayoutIfNeeded();
        }
コード例 #30
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            DurationLabel.Font = DurationLabel.Font.GetMonospacedDigitFont();

            PreferredContentSize = View.Frame.Size;

            resizeSwitch();

            var durationConverter           = new TimeSpanToDurationWithUnitValueConverter();
            var dateConverter               = new DateToTitleStringValueConverter();
            var timeConverter               = new DateTimeToTimeConverter();
            var visibilityConverter         = new MvxVisibilityValueConverter();
            var inverterVisibilityConverter = new MvxInvertedVisibilityValueConverter();
            var colorConverter              = new MvxRGBValueConverter();

            var bindingSet = this.CreateBindingSet <EditTimeEntryViewController, EditTimeEntryViewModel>();

            //Text
            bindingSet.Bind(DescriptionLabel).To(vm => vm.Description);
            bindingSet.Bind(ProjectLabel).To(vm => vm.Project);
            bindingSet.Bind(ClientLabel).To(vm => vm.Client);
            bindingSet.Bind(BillableSwitch).To(vm => vm.Billable);
            bindingSet.Bind(DurationLabel)
            .To(vm => vm.Duration)
            .WithConversion(durationConverter);

            bindingSet.Bind(StartDateLabel)
            .To(vm => vm.StartTime)
            .WithConversion(dateConverter);

            bindingSet.Bind(StartTimeLabel)
            .To(vm => vm.StartTime)
            .WithConversion(timeConverter);

            //Commands
            bindingSet.Bind(CloseButton).To(vm => vm.CloseCommand);
            bindingSet.Bind(DeleteButton).To(vm => vm.DeleteCommand);

            //Description visibility
            bindingSet.Bind(AddDescriptionView)
            .For(v => v.BindVisible())
            .To(vm => vm.Description)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(DescriptionLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.Description)
            .WithConversion(inverterVisibilityConverter);

            //Project visibility
            bindingSet.Bind(AddProjectAndTaskView)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(ProjectLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(inverterVisibilityConverter);

            bindingSet.Bind(ProjectDot)
            .For(v => v.BindVisible())
            .To(vm => vm.Project)
            .WithConversion(inverterVisibilityConverter);

            //Tags visibility
            bindingSet.Bind(AddTagsView)
            .For(v => v.BindVisible())
            .To(vm => vm.Tags)
            .WithConversion(visibilityConverter);

            bindingSet.Bind(TagsLabel)
            .For(v => v.BindVisible())
            .To(vm => vm.Tags)
            .WithConversion(inverterVisibilityConverter);

            //Colors
            bindingSet.Bind(ProjectDot)
            .For(v => v.BackgroundColor)
            .To(vm => vm.ProjectColor)
            .WithConversion(colorConverter);

            bindingSet.Apply();
        }