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();
        }
        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();
        }
        void ReleaseDesignerOutlets()
        {
            if (EmptyStateButton != null)
            {
                EmptyStateButton.Dispose();
                EmptyStateButton = null;
            }

            if (EmptyStateImageView != null)
            {
                EmptyStateImageView.Dispose();
                EmptyStateImageView = null;
            }

            if (EmptyStateTextLabel != null)
            {
                EmptyStateTextLabel.Dispose();
                EmptyStateTextLabel = null;
            }

            if (EmptyStateTitleLabel != null)
            {
                EmptyStateTitleLabel.Dispose();
                EmptyStateTitleLabel = null;
            }

            if (EmptyStateView != null)
            {
                EmptyStateView.Dispose();
                EmptyStateView = null;
            }

            if (TimeEntriesTableView != null)
            {
                TimeEntriesTableView.Dispose();
                TimeEntriesTableView = null;
            }

            if (WelcomeImageView != null)
            {
                WelcomeImageView.Dispose();
                WelcomeImageView = null;
            }
        }