WPF 为PasswordBox控件的Password增加绑定功能

2017-08-11 12:29:00来源:CSDN作者:lj22377人点击

分享

转载于:http://www.wxzzz.com/1415.html
其它相关文章:http://www.cnblogs.com/zhouyinhui/archive/2009/08/27/1554943.html

在WPF中,PasswordBox 控件本身 Password 属性是不支持直接绑定的,在使用绑定的时候略显得麻烦。所以我们做一个附加属性上去,然后进行绑定并且控制PasswordBox控件的Password属性的值与我们自己定义的附加属性同步,这样就完美了。

以下为代码:

    /// <summary>      /// 为PasswordBox控件的Password增加绑定功能      /// </summary>      public static class PasswordBoxHelper    {        public static readonly DependencyProperty PasswordProperty =            DependencyProperty.RegisterAttached("Password",            typeof(string), typeof(PasswordBoxHelper),            new FrameworkPropertyMetadata(string.Empty, OnPasswordPropertyChanged));        public static readonly DependencyProperty AttachProperty =            DependencyProperty.RegisterAttached("Attach",            typeof(bool), typeof(PasswordBoxHelper), new PropertyMetadata(false, Attach));        private static readonly DependencyProperty IsUpdatingProperty =           DependencyProperty.RegisterAttached("IsUpdating", typeof(bool),           typeof(PasswordBoxHelper));        public static void SetAttach(DependencyObject dp, bool value)        {            dp.SetValue(AttachProperty, value);        }        public static bool GetAttach(DependencyObject dp)        {            return (bool)dp.GetValue(AttachProperty);        }        public static string GetPassword(DependencyObject dp)        {            return (string)dp.GetValue(PasswordProperty);        }        public static void SetPassword(DependencyObject dp, string value)        {            dp.SetValue(PasswordProperty, value);        }        private static bool GetIsUpdating(DependencyObject dp)        {            return (bool)dp.GetValue(IsUpdatingProperty);        }        private static void SetIsUpdating(DependencyObject dp, bool value)        {            dp.SetValue(IsUpdatingProperty, value);        }        private static void OnPasswordPropertyChanged(DependencyObject sender,            DependencyPropertyChangedEventArgs e)        {            PasswordBox passwordBox = sender as PasswordBox;            passwordBox.PasswordChanged -= PasswordChanged;            if (!(bool)GetIsUpdating(passwordBox))            {                passwordBox.Password = (string)e.NewValue;            }            passwordBox.PasswordChanged += PasswordChanged;        }        private static void Attach(DependencyObject sender,            DependencyPropertyChangedEventArgs e)        {            PasswordBox passwordBox = sender as PasswordBox;            if (passwordBox == null)                return;            if ((bool)e.OldValue)            {                passwordBox.PasswordChanged -= PasswordChanged;            }            if ((bool)e.NewValue)            {                passwordBox.PasswordChanged += PasswordChanged;            }        }        private static void PasswordChanged(object sender, RoutedEventArgs e)        {            PasswordBox passwordBox = sender as PasswordBox;            SetIsUpdating(passwordBox, true);            SetPassword(passwordBox, passwordBox.Password);            SetIsUpdating(passwordBox, false);        }    }

调用:

<PasswordBox Width="300" Margin="5" c:PasswordBoxHelper.Password="{Binding Path=LoginUser.Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></PasswordBox>

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台