码迷,mamicode.com
首页 > 数据库 > 详细

WPF 中 PasswordBox 的数据绑定

时间:2015-06-11 14:34:38      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

WPF中PasswordBox的Password属性不支持数据绑定(出于安全考虑),而在MVVM设计模式中又是必须的。

所以我们要增加一个Helper类来完成绑定。

 

代码转自:http://blog.csdn.net/oyi319/article/details/6551532

    /// <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);  
        }  
    }  

 

然后在Xmal中PasswordBox可做如下绑定

 

    <PasswordBox heplers:PasswordBoxHelper.Attach="True" heplers:PasswordBoxHelper.Password="{Binding Path=Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

 

WPF 中 PasswordBox 的数据绑定

标签:

原文地址:http://www.cnblogs.com/MagicalAgent/p/4568934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!