I have a PasswordBox in which I have customized to accept validation errors on user input. I use a radio button to enable the password button to allow user input
and another radio box to disable it and clear any input information. I have another field that is controlled in exactly the same manner but is a textbox so I am using the following code to disable validation errors in it once the disable radio button has been
checked:
Validation.ClearInvalid(Username.GetBindingExpression(TextBox.TextProperty));
If I wanted to clear validation errors in my PasswordBox how could I do this in a similar manner.
My XAML code is as follows:
<Label Grid.Column="0" Content="Security:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,60,0,0" /><Grid Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="195" Margin="0,60,0,0" ><Grid.ColumnDefinitions><ColumnDefinition Width="30*" /><ColumnDefinition Width="45*" /><ColumnDefinition Width="25*" /></Grid.ColumnDefinitions><RadioButton Grid.Column="0" Name="Integrated" Margin="0,5,0,0" GroupName="Security" Checked="Btn_Checked" > :Int Sec</RadioButton><RadioButton Grid.Column="1" Name="Trusted" Margin="0,5,0,0" GroupName="Security" IsChecked="True" Checked="Btn_Checked" > :Trusted Con</RadioButton><RadioButton Grid.Column="2" Name="None" Margin="0,5,0,0" GroupName="Security" Unchecked="Btn_NotChecked" > :None</RadioButton></Grid> <Label Grid.Column="0" Content="Username:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,90,0,0" /><TextBox Grid.Column="1" Name="Username" IsEnabled="{Binding ElementName=None, Path=IsChecked}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="195" Margin="0,90,0,0" MaxLength="30" CommandManager.PreviewExecuted="PasteDisabler" ContextMenu="{x:Null}" > <TextBox.Text><Binding RelativeSource="{RelativeSource Self}" Path="Tag" Mode="OneWayToSource" UpdateSourceTrigger="PropertyChanged"><Binding.ValidationRules> <Validation:UserNamePass/></Binding.ValidationRules></Binding></TextBox.Text></TextBox><Label Grid.Column="0" Content="Password:" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,120,0,0" /><PasswordBox Name="Password" IsEnabled="{Binding ElementName=None, Path=IsChecked}" Validation:PasswordHelper.Attach="True" MaxLength="20" Height="22" HorizontalAlignment="Left" VerticalAlignment="Top" Width="195" Grid.Column="1" Margin="0,120,0,0"> <Validation:PasswordHelper.Password><Binding RelativeSource="{RelativeSource Self}" Path="Tag" Mode="OneWayToSource" UpdateSourceTrigger="PropertyChanged"><Binding.ValidationRules><Validation:UserNamePass/></Binding.ValidationRules></Binding></Validation:PasswordHelper.Password></PasswordBox>
My radio box controls are as follows:
private void Btn_Checked(object sender, RoutedEventArgs e) { if (Trusted.IsChecked == true) { SecurityType = "; Trusted_Connection=True"; } else if (Integrated.IsChecked == true) { SecurityType = "; Integrated Security=True"; } } private void Btn_NotChecked(object sender, RoutedEventArgs e) { if (!None.IsChecked == true) { Username.Clear(); Password.Clear(); Validation.ClearInvalid(Username.GetBindingExpression(TextBox.TextProperty)); } }
And my Username and Password validations are as follows:
public class UserNamePass : ValidationRule { public override ValidationResult Validate(object value, CultureInfo cultureInfo) { var usernamepassEx = new Regex(@"^[a-zA-Z0-9]+$"); var usernamepass = value as string; if (String.IsNullOrEmpty(usernamepass)) { return new ValidationResult(false, "Field cannot be empty"); } else if (!String.IsNullOrEmpty(usernamepass)) { if (!usernamepassEx.Match(usernamepass).Success) { return new ValidationResult(false,"Alphanumeric characters only."); } return new ValidationResult(true, null); } return new ValidationResult(true, null); } } public class UserPass : ValidationRule { public override ValidationResult Validate(object value, CultureInfo cultureInfo) { var usernamepassEx = new Regex(@"^[a-zA-Z0-9]+$"); var usernamepass = value as string; if (String.IsNullOrEmpty(usernamepass)) { return new ValidationResult(false, "Field cannot be empty"); } else if (!String.IsNullOrEmpty(usernamepass)) { if (!usernamepassEx.Match(usernamepass).Success) { return new ValidationResult(false,"Alphanumeric characters only."); } return new ValidationResult(true, null); } return new ValidationResult(true, null); } }
Thanks Callum