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

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

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

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

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

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

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

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

            if (ErrorMessageLabel != null)
            {
                ErrorMessageLabel.Dispose();
                ErrorMessageLabel = null;
            }
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();
            prepareIndicatorView();

            this.Bind(CloseButton.Tapped(), ViewModel.CloseButtonTapped);
            this.Bind(FeedbackTextView.Text(), ViewModel.FeedbackText);
            this.Bind(ErrorView.Tapped(), ViewModel.ErrorViewTapped);

            this.Bind(SendButton.Tapped(), ViewModel.SendButtonTapped);
            SendButton.TouchUpInside += (sender, args) => { FeedbackTextView.ResignFirstResponder(); };

            this.Bind(ViewModel.IsFeedbackEmpty, FeedbackPlaceholderTextView.BindIsVisible());
            this.Bind(ViewModel.ErrorViewVisible, ErrorView.BindAnimatedIsVisible());
            this.Bind(ViewModel.SendEnabled, SendButton.BindEnabled());

            this.Bind(ViewModel.IsLoading.Invert(), SendButton.BindIsVisible());
            this.Bind(ViewModel.IsLoading, IndicatorView.BindIsVisible());
            this.Bind(ViewModel.IsLoading, UIApplication.SharedApplication.BindNetworkActivityIndicatorVisible());
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            TitleLabel.Text = Resources.ContactUs;
            FeedbackPlaceholderTextView.Text = Resources.FeedbackFieldPlaceholder;
            ErrorTitleLabel.Text             = Resources.Oops.ToUpper();
            ErrorMessageLabel.Text           = Resources.SomethingWentWrongTryAgain;
            SendButton.SetTitle(Resources.Send, UIControlState.Normal);

            prepareViews();
            prepareIndicatorView();

            CloseButton.Rx()
            .BindAction(ViewModel.Close)
            .DisposedBy(DisposeBag);

            FeedbackTextView.Rx().Text()
            .Subscribe(ViewModel.FeedbackText)
            .DisposedBy(DisposeBag);

            ErrorView.Rx()
            .BindAction(ViewModel.DismissError)
            .DisposedBy(DisposeBag);

            SendButton.Rx()
            .BindAction(ViewModel.Send)
            .DisposedBy(DisposeBag);
            SendButton.TouchUpInside += (sender, args) => { FeedbackTextView.ResignFirstResponder(); };

            ViewModel.IsFeedbackEmpty
            .Subscribe(FeedbackPlaceholderTextView.Rx().IsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.Error
            .Select(NotNull)
            .Subscribe(ErrorView.Rx().AnimatedIsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.SendEnabled
            .Subscribe(SendButton.Rx().Enabled())
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading
            .Invert()
            .Subscribe(SendButton.Rx().IsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading
            .Invert()
            .Subscribe(CloseButton.Rx().IsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading
            .Subscribe(IndicatorView.Rx().IsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading
            .Subscribe(UIApplication.SharedApplication.Rx().NetworkActivityIndicatorVisible())
            .DisposedBy(DisposeBag);
        }