WPF PasswordBox password数据绑定

WPF的PasswordBox控件的Password属性不是依赖属性,无法直接进行数据绑定,为使其在MVVM模式中正常使用,可以为PasswordBox增加一个助手类,步骤如下:

原文链接:http://blog.csdn.net/ryb666666/article/details/7629767

1.新建一个PasswordBoxHelper 帮助类

 1  public static class PasswordBoxHelper
 2     {
 3         public static readonly DependencyProperty PasswordProperty =
 4             DependencyProperty.RegisterAttached("Password",
 5             typeof(string), typeof(PasswordBoxHelper),
 6             new FrameworkPropertyMetadata(string.Empty, OnPasswordPropertyChanged));
 7         public static readonly DependencyProperty AttachProperty =
 8             DependencyProperty.RegisterAttached("Attach",
 9             typeof(bool), typeof(PasswordBoxHelper), new PropertyMetadata(false, Attach));
10         private static readonly DependencyProperty IsUpdatingProperty =
11            DependencyProperty.RegisterAttached("IsUpdating", typeof(bool),
12            typeof(PasswordBoxHelper));
13
14         public static void SetAttach(DependencyObject dp, bool value)
15         {
16             dp.SetValue(AttachProperty, value);
17         }
18         public static bool GetAttach(DependencyObject dp)
19         {
20             return (bool)dp.GetValue(AttachProperty);
21         }
22         public static string GetPassword(DependencyObject dp)
23         {
24             return (string)dp.GetValue(PasswordProperty);
25         }
26         public static void SetPassword(DependencyObject dp, string value)
27         {
28             dp.SetValue(PasswordProperty, value);
29         }
30         private static bool GetIsUpdating(DependencyObject dp)
31         {
32             return (bool)dp.GetValue(IsUpdatingProperty);
33         }
34         private static void SetIsUpdating(DependencyObject dp, bool value)
35         {
36             dp.SetValue(IsUpdatingProperty, value);
37         }
38         private static void OnPasswordPropertyChanged(DependencyObject sender,
39             DependencyPropertyChangedEventArgs e)
40         {
41             PasswordBox passwordBox = sender as PasswordBox;
42             passwordBox.PasswordChanged -= PasswordChanged;
43             if (!(bool)GetIsUpdating(passwordBox))
44             {
45                 passwordBox.Password = (string)e.NewValue;
46             }
47             passwordBox.PasswordChanged += PasswordChanged;
48         }
49         private static void Attach(DependencyObject sender,
50             DependencyPropertyChangedEventArgs e)
51         {
52             PasswordBox passwordBox = sender as PasswordBox;
53             if (passwordBox == null)
54                 return;
55             if ((bool)e.OldValue)
56             {
57                 passwordBox.PasswordChanged -= PasswordChanged;
58             }
59             if ((bool)e.NewValue)
60             {
61                 passwordBox.PasswordChanged += PasswordChanged;
62             }
63         }
64         private static void PasswordChanged(object sender, RoutedEventArgs e)
65         {
66             PasswordBox passwordBox = sender as PasswordBox;
67             SetIsUpdating(passwordBox, true);
68             SetPassword(passwordBox, passwordBox.Password);
69             SetIsUpdating(passwordBox, false);
70         }
71     }

2.在View层XAML绑定

1  <PasswordBox x:Name="passwordBox"  PasswordChar="*" Helper:PasswordBoxHelper.Attach="True"
2              Helper:PasswordBoxHelper.Password="{Binding Path=Pwd,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
1 <Window x:Class="HR_Test01.View.LoginView"
2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4         xmlns:Helper="clr-namespace:HR_Test01.Model"
5         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
7         xmlns:local="clr-namespace:HR_Test01.View"
8         mc:Ignorable="d"  AllowsTransparency="True" WindowStyle="None"  MouseLeftButtonDown="Window_MouseLeftButtonDown"
9         Title="登录界面" Height="250" Width="400" WindowStartupLocation="CenterScreen">
时间: 2024-10-12 15:55:16

WPF PasswordBox password数据绑定的相关文章

WPF 中 PasswordBox 的数据绑定

WPF中PasswordBox的Password属性不支持数据绑定(出于安全考虑),而在MVVM设计模式中又是必须的. 所以我们要增加一个Helper类来完成绑定. 代码转自:http://blog.csdn.net/oyi319/article/details/6551532 /// <summary> /// 为PasswordBox控件的Password增加绑定功能 /// </summary> public static class PasswordBoxHelper {

WPF DataGrid 之数据绑定

1. Auto generation of columns 最简单的方法莫过于让DataGrid根据数据源中的字段自动生成列了: 根据实体类的公共属性, 能够自动生成四种类型的数据列,对应关系如下: TextBox columns for string values; CheckBox columns for boolean values; ComboBox columns for enumerable values; Hyperlink columns for Uri values; 拖个Da

WPF PasswordBox不支持绑定解决方法

PasswordBox的Password属性因为安全原因不支持直接绑定,可以使用依赖属性实现.直接插入代码 public class PasswordBoxHelper { public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached("Password", typeof(string), typeof(PasswordBoxHelper), new Fr

WPF入门教程系列十五——WPF中的数据绑定(一)

使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数据绑定功能类似,但也有所不同,在 WPF中以通过后台代码绑定.前台XAML中进行绑定,或者两者组合的方式进行数据绑定.您可以绑定控件.公共属性.XML 或对象,WPF中的数据绑定跟WinForm与ASP.NET相比,更加快捷.灵活和简单. 一.什么是数据绑定 WPF 中的数据绑定,必须要有绑定目标和

WPF PasswordBox MVVM 实现

由于PasswordBox.Password属性非依赖属性,所以不能作为绑定的目标,以下是本人的MVVM实现方法. PasswordBox.Password与TextBox.Text同步,TextBox只是为了演示,实际使用的是TextBox.Text绑定的Source. 通过Behavior添加PasswordChanged事件的事件处理器,以及自定义一个附加属性实现绑定,Behavior需要引用System.Windows.Interactivity.dll,代码如下: using Syst

WPF中的数据绑定!!!

引用自:https://msdn.microsoft.com/zh-cn/magazine/cc163299.aspx 数据点: WPF 中的数据绑定 数据点 WPF 中的数据绑定 John Papa 代码下载位置: DataPoints2007_12.exe (161 KB) Browse the Code Online   目录 数据绑定细节 创建简单的绑定 绑定模式 绑定的时间 绑定到 XML 对象绑定和 DataTemplates 对数据进行排序 欢迎试用和反馈 到目前为止,很多人都知道

【值转换器】 WPF中Image数据绑定Icon对象

原文:[值转换器] WPF中Image数据绑定Icon对象 ? ? ? ?这是原来的代码: ? ? ? ?<Image Source="{Binding MenuIcon}" ?/> ? ? ? ?这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico". ? ? ? ?我遇到的问题是,同事已经封装好的类中的MenuIcon是Icon对象,并不是一个相对或者绝对的路径,另外WPF里也没有可以直接表示Icon对象的控

Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) --------------------------------------------------------------------------------引用或转载时请保留以下信息:大可山?[MSN:a3news(AT)hotmail.com] http://www.zpxp.com?http://www.brawdraw.com萝卜鼠在线图形图像处理

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

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