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