private void OnMasterPasswordTextBoxPasswordChanged(object sender, RoutedEventArgs e)
        {
            _vm.ResetValidation(CreateAccountViewModel.ValidationProperties.IsPasswordsEqual);

            _vm.UserPasswordWrapper.Password = _masterPasswordTextBox.Password;

            if (sender != null)
            {
                OnMasterPasswordTextBoxPasswordChanged(null, null);
            }
            Clear(PasswordBoxObjectType.Master, false);
            Clear(PasswordBoxObjectType.Confirm, false);

            if (_vm.ValidateMasterPassword())
            {
                SetTag(PasswordBoxObjectType.Master, true);
            }
        }
        public CreateAccount(IResolver resolver, CreateAccountViewModel viewModel)
        {
            InitializeComponent();

            _resolver  = resolver;
            _pbData    = _resolver.GetInstanceOf <IPBData>();
            _analytics = _resolver.GetInstanceOf <IInAppAnalytics>();
            _owner     = ((PBApp)Application.Current).FindWindow <LoginWindow>();

            Loaded += OnLoaded;

            TitleGrid.MouseLeftButtonDown += OnTitleGridMouseLeftButtonDown;
            EmailTextBox.KeyDown          += OnEmailTextBoxKeyDown;
            EmailTextBox.LostFocus        += (o, e) =>
            {
                if (_vm.IsEmailHasValue)
                {
                    _vm.ValidateEmail();
                }
            };

            _vm         = viewModel;
            DataContext = _vm;

            _vm.OnSubmit += (o, e) =>
            {
                _vm.ValidateEmail();

                SetTag(PasswordBoxObjectType.Master, _vm.IsValidMasterPassword);
                SetTag(PasswordBoxObjectType.Confirm, _vm.IsPasswordsEqual && _vm.IsValidMasterPassword);

                Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(delegate()
                {
                    if (!_vm.IsValidEmail)
                    {
                        EmailTextBox.Focus();
                    }
                    else if (!_vm.IsValidMasterPassword)
                    {
                        _masterPasswordTextBox.Focus();
                    }
                    else if (!_vm.IsPasswordsEqual)
                    {
                        _confirmPasswordTextBox.Focus();
                    }
                }));
            };

            _vm.OnReset += (o, e) =>
            {
                Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(delegate()
                {
                    _vm.ResetValidation(CreateAccountViewModel.ValidationProperties.IsPasswordsEqual);
                    _vm.ResetValidation(CreateAccountViewModel.ValidationProperties.IsValidConfirmPassword);
                    _vm.ResetValidation(CreateAccountViewModel.ValidationProperties.IsConfirmPasswordHasValue);
                    _vm.ResetValidation(CreateAccountViewModel.ValidationProperties.IsEmailHasValue);
                    _vm.ResetValidation(CreateAccountViewModel.ValidationProperties.IsValidMasterPassword);
                    _vm.ResetValidation(CreateAccountViewModel.ValidationProperties.IsValidEmail);
                    Clear(PasswordBoxObjectType.Master, true);
                    Clear(PasswordBoxObjectType.Confirm, true);
                    EmailTextBox.Focus();
                    Keyboard.Focus(EmailTextBox);
                    EmailTextBox.Select(0, 0);
                }));
            };

            _owner.Topmost = false;

            EmailTextBox.Focus();
        }