![]() ![]() I was inspired by Thejuan's answer to write a simpler attached property. SetPassword(passwordBox, passwordBox.Password) Private static void PasswordChanged(object sender, RoutedEventArgs e) Private static void Attach(DependencyObject sender, ![]() PasswordBox.PasswordChanged += PasswordChanged PasswordBox.Password = (string)e.NewValue PasswordBox.PasswordChanged -= PasswordChanged PasswordBox passwordBox = sender as PasswordBox Private static void OnPasswordPropert圜hanged(DependencyObject sender, Private static void SetIsUpdating(DependencyObject dp, bool value) Return (bool)dp.GetValue(IsUpdatingProperty) Private static bool GetIsUpdating(DependencyObject dp) Public static void SetPassword(DependencyObject dp, string value) ![]() Return (string)dp.GetValue(PasswordProperty) Public static string GetPassword(DependencyObject dp) Return (bool)dp.GetValue(AttachProperty) Public static bool GetAttach(DependencyObject dp) Public static void SetAttach(DependencyObject dp, bool value) Private static readonly DependencyProperty IsUpdatingProperty =ĭependencyProperty.RegisterAttached("IsUpdating", typeof(bool), Typeof(bool), typeof(PasswordHelper), new PropertyMetadata(false, Attach)) Public static readonly DependencyProperty AttachProperty =ĭependencyProperty.RegisterAttached("Attach", New FrameworkPropertyMetadata(string.Empty, OnPasswordPropert圜hanged)) Public static readonly DependencyProperty PasswordProperty =ĭependencyProperty.RegisterAttached("Password", You can use attached properties to create a helper like this: public static class PasswordHelper But for my PasswordBox never gets the value.Look at this blog post and see if it is helping you.Īpparently the link is dead now so here is the original solution (found here): If we made any mistake (defined on my Validation class), when I do this: if (!beUserName.HasError & !bePassword.HasError)Įach BindingExpression should say true of false depending on error validations. If (bePassword != null) bePassword.UpdateSource() If (beUserName != null) beUserName.UpdateSource() Īnd this is how I get it for the PasswordBox: BindingExpression bePassword = textBoxUserPass.GetBindingExpression(PasswordBoxAssistant.BoundPassword) This is how I get the BindingExpression for each TextBox: BindingExpression beUserName = textBoxUserName.GetBindingExpression(TextBox.TextProperty) This is a regular TextBox that I use and works fine: Īnd this is the PasswordBox I tried to simulate: So, apparently, fantastic! I can bind my PasswordBox with its Password property, so then I can bind with my validation. Because its Password is not bindable due to security reasons, I tried to make a binding following this link (also explained here, for CodeProject users). For making validations I followed this link, that shows how to validate on TextBox. I'm trying to make a validation for a PasswordBox. ((MyObject)DataContext).SecurePassword = MyPassword.SecurePassword this should trigger binding and therefore validation Private void MyPassword_Changed(object sender, RoutedEventArgs e) MyPassword.SetBinding(SecurePasswordProperty, passwordBinding) you can configure other binding stuff here PasswordBinding.ValidatesOnDataErrors = true Public static readonly DependencyProperty SecurePasswordProperty =ĭependencyProperty.RegisterAttached("SecurePassword", typeof(SecureString), typeof(MyWindow)) ĭataContext = myObject // created somewhereīinding passwordBinding = new Binding(SecurePasswordProperty.Name) Then, the corresponding Window code like this will trigger PasswordBox binding: // add a custom DependencyProperty If (SecurePassword = null || SecurePassword.Length = 0)Īnd a Window Xaml with a PasswordBox like this: this is where I code my custom business rule If (memberName = "SecurePassword" || memberName = null) Private string Validate(string memberName) Set Mode=TwoWay on your binding local:PasswordBoxAssistant.BoundPassword=" Try setting ValidatesOnDataErrors=True and ValidatesOnExceptions=True on your binding: ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |