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>
时间: 2024-10-07 14:09:26

WPF PasswordBox不支持绑定解决方法的相关文章

【转】WPF PasswordBox不支持绑定解决方法

原文地址:https://www.cnblogs.com/wxjing67/p/3935717.html PasswordBox的Password属性因为安全原因不支持直接绑定,可以使用依赖属性实现.直接插入代码 public class PasswordBoxHelper { public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached("Password&quo

兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法

兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法 // 获取事件function getEvent(){ if(window.event) {return window.event;} func=getEvent.caller; while(func!=null){ var arg0=func.arguments[0]; if(arg0){ if((arg0.constructor==Event || arg0.constructor ==MouseEv

sublime&#160;text不支持中文解决方法

本质就是对gdk,gb2312编码的不支持 1.对于2.0.2版本 输入以下python命令安装package control.(view-->show console) --------------------------------------------------------------------------- import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_

Win7 远程桌面提示“发生身份验证错误。要求的函数不受支持”的解决方法

系统环境:服务器:Windows Server 2012 R2客户端:Windows 7为了方便对服务器的管理,平时都在客户端远程桌面到服务器,最近突然连接不上,报"发生身份验证错误.要求的函数不受支持"的错误.出现错误时第一反应是检查服务器,最后的事实证明,这个错误跟服务器没有关系,问题出在客户端系统上.把解决方法总结如下:方法一:卸载KB4343900更新补丁.此补丁是造成故障的罪魁祸首.方法二:修改注册表,添加如下表项:Windows Registry Editor Versio

关于activiti-5.22.0.0不支持事务解决方法

去年在做OA的时候使用activiti-5.22.0.0做为bpm的管理引擎,不过集成进来时候,在项目即将上线的时候发现activiti这个版本不支持事务. 所以在这里给出解决方案,希望给遇到小伙伴提供一种解决方法 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=

VMware Workstation下安装centos提示硬盘不支持的解决方法

最近在搞centos,遇见的一些问题,记录一下 首先是安装问题 安装过程参考http://www.cnblogs.com/seesea125/archive/2012/02/25/2368255.html 见下图 enter确认的话,重启后会一直卡在centos页面 解决方法就是: 在安装过程第一步中将 Install system with basic video driver 改为 Install or upgrade an existing system即可

jquery on()方法重复绑定解决方法

最近再一次项目中发现 不刷新页面的情况下使用on()方法绑定事件会出现重复执行的问题,意思就是说点击一次会绑定一次...点击n次会绑定n次,执行起来是以你绑定的次数为准,绑定了n次就会执行n次 解决办法 在每次进行on()绑定之前先使用off()方法解除下绑定 例: //解除绑定事件 $('#aa').off('click'); //添加绑定事件 $('#aaa').on('click',dianjishijian); 完美解决重复绑定事件问题.

Ecshop安装cls_image::gd_version()和不支持JPEG解决方法

在安装Ecshop的时候,遇到两个问题: 一.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in D:\X\www\ecshop\install\includes\lib_installer.php on line 31 解决办法: 找到install/includes/lib_installer.php中的第31行   return cls_image::g

iis8 默认不支持svc解决方法

最近在IIS8中发布WCF服务应用时,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少对WCF服务的Managed Handler,按照以下步骤添加后,IIS8即支持WCF服务. 1. 首先添加MIME类型 扩展名“.svc”,MIME类型 “application/octet-stream” 2. 然后在“Handler Mappings”中添加Managed Handler 请求路径: *.svc 类型: System.ServiceModel.Activation.HttpHa