void ReleaseDesignerOutlets()
        {
            if (ContentView != null)
            {
                ContentView.Dispose();
                ContentView = null;
            }

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

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

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

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

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

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

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

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

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

            if (DescriptionLabelTopConstraint != null)
            {
                DescriptionLabelTopConstraint.Dispose();
                DescriptionLabelTopConstraint = null;
            }
        }
Example #2
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            // Set view title.
            Title = ViewModel.Title;

            // Set navigation bar style.
            this.SetNavigationBarStyle();

            // Add left navigation bar item.
            var leftNavigationButton = new UIBarButtonItem(UIBarButtonSystemItem.Cancel, (sender, e) =>
                                                           ViewModel.GoBackCommand.Execute(null));

            NavigationItem.LeftBarButtonItem = leftNavigationButton;

            // Add right navigation bar item.
            var rightNavigationButton = new UIBarButtonItem(UIBarButtonSystemItem.Save, (sender, e) =>
                                                            ViewModel.SaveDetailsCommand.Execute(null));

            NavigationItem.RightBarButtonItem = rightNavigationButton;

            // Adjust description text field border.
            DescriptionTextField.BorderStyle = UITextBorderStyle.RoundedRect;

            // Feed the text from text view into the text field which serves
            // as the visual frame.
            DescriptionTextView.Changed += (sender, e) =>
            {
                DescriptionTextField.Text = DescriptionTextView.Text;
                ViewModel.Validate();
            };

            // Register event handlers to trigger validation.
            NSNotificationCenter.DefaultCenter.AddObserver(UITextField.TextFieldTextDidChangeNotification, obj =>
            {
                ViewModel.Validate();
            });
            NSNotificationCenter.DefaultCenter.AddObserver(UITextView.TextDidChangeNotification, obj =>
            {
                ViewModel.Validate();
            });

            // Move the labels and fields up if needed.
            if (ViewModel.IsExisting)
            {
                DescriptionLabelTopConstraint.Constant = -50;
            }

            // Register event handlers to trigger focus flow.
            StreetNameTextField.ShouldReturn     += textField => DescriptionTextView.BecomeFirstResponder();
            RoomsTextField.ShouldReturn          += textField => LivingAreaTextField.BecomeFirstResponder();
            LivingAreaTextField.ShouldReturn     += textField => LotSizeTextField.BecomeFirstResponder();
            LotSizeTextField.ShouldReturn        += textField => OperatingCostsTextField.BecomeFirstResponder();
            OperatingCostsTextField.ShouldReturn += textField => OperatingCostsTextField.ResignFirstResponder();

            // Create and apply the binding set.
            var set = this.CreateBindingSet <DetailsView, DetailsViewModel>();

            set.Bind(StreetNameTextField).To(vm => vm.StreetName);
            set.Bind(StreetNameLabel).For("Visibility").To(vm => vm.IsExisting).WithConversion("InvertedVisibility");
            set.Bind(StreetNameTextField).For("Visibility").To(vm => vm.IsExisting).WithConversion("InvertedVisibility");
            set.Bind(DescriptionTextView).To(vm => vm.Details.Description);
            set.Bind(RoomsTextField).To(vm => vm.Details.Rooms);
            set.Bind(LivingAreaTextField).To(vm => vm.Details.LivingArea);
            set.Bind(LotSizeTextField).To(vm => vm.Details.LotSize);
            set.Bind(OperatingCostsTextField).To(vm => vm.Details.OperatingCosts);
            set.Bind(rightNavigationButton).For(b => b.Enabled).To(vm => vm.IsValid);
            set.Apply();
        }