首页 > 代码库 > WPF PasswordBox不支持绑定解决方法

WPF PasswordBox不支持绑定解决方法

PasswordBox的Password属性因为安全原因不支持直接绑定,可以使用依赖属性实现。直接插入代码

public 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 helper:PasswordHelper.Attach="True" helper:PasswordHelper.Password="{Binding Model.Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">       <PasswordBox.InputBindings>           <KeyBinding Key="Enter" Command="{Binding LoginCommand}"/>       </PasswordBox.InputBindings>   </PasswordBox>

 

WPF PasswordBox不支持绑定解决方法