WPF中PasswordBox控件无法绑定Password属性解决办法
2013-12-31 11:56
435 查看
在WPF中,默认的Password控件的Password属性是不允许为之绑定的,下面是一个解决绑定Password的方法的代码:
1.前台代码
2.后台代码
3. 为PasswordBox控件的Password增加绑定功能 的PasswordBoxHelpe.csr文件
1.前台代码
<Window x:Class="PasswordBoxDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="142" Width="256" xmlns:Helper="clr-namespace:PasswordBoxDemo" WindowStartupLocation="CenterScreen"> <Grid> <ListView x:Name="lvUsers" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > <ListView.View > <GridView x:Name="GridView"> <GridView.Columns> <GridViewColumn Header="用户名" > <GridViewColumn.CellTemplate> <DataTemplate > <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{Binding Path=UserName}" ToolTip="{Binding Path=UserName}" Width="100" Height="20"></TextBox> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="密码" > <GridViewColumn.CellTemplate> <DataTemplate > <PasswordBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="100" Height="20" PasswordChar="*" MaxLength="20" Helper:PasswordBoxHelper.Attach="True" Helper:PasswordBoxHelper.Password="{Binding Path=Pwd,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView.Columns> </GridView> </ListView.View> </ListView> </Grid> </Window>
2.后台代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Collections.ObjectModel; namespace PasswordBoxDemo { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainWindow_Loaded); } void MainWindow_Loaded(object sender, RoutedEventArgs e) { ObservableCollection<User> users = new ObservableCollection<User>(); User p = new User(); p.UserName = "张三"; p.Pwd = "zhangsan"; User p2 = new User(); p2.UserName = "李四"; p2.Pwd = "lisi"; users.Add(p); users.Add(p2); this.lvUsers.ItemsSource = users; } } public class User { private string _userName; private string _password; public string UserName { set { _userName = value; } get { return _userName; } } public string Pwd { set { _password = value; } get { return _password; } } } }
3. 为PasswordBox控件的Password增加绑定功能 的PasswordBoxHelpe.csr文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; namespace PasswordBoxDemo { /// <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的Password非依赖属性,而无法绑定的问题,以及常规命令如何使用
- WPF 中PasswordBox控件的Password属性不能Binding问题解决方法
- datagridview“当控件与数据源绑定后,无法插入行”解决办法
- WPF 为PasswordBox控件的Password增加绑定功能
- 为什么silverlight的PasswordBox控件的password属性不可以绑定?该如何实现绑定?
- 【转】WPF中PasswordBox控件的Password属性的数据绑定
- SL - 摘录 - 解决PasswordBox的Password无法正常绑定的问题
- 三十九、PasswordBox 控件Password属性的绑定
- 在DataList使用 用户控件 并 绑定属性 时可能的问题的解决办法
- asp.net中的服务器端控件 textbox 设为只读属性后无法获取JS给其赋的值解决办法
- C# ComboBox控件“设置 DataSource 属性后无法修改项集合”的完美解决方法
- 远程桌面连接控件无法初始化的问题及其解决办法
- 无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
- VS2013右边属性栏无法输入的解决办法
- WPF中去边框窗体与WebBrowser控件的兼容问题解决办法
- 使用Spring配置shiro时,自定义Realm中属性无法使用注解注入解决办法
- 腾讯云公网IP无法访问(公网IP无法绑定-监听)的解决办法
- 隐藏文件夹隐藏属性项灰色(无法更改)解决办法(转载)
- WPF绑定各种数据源之元素控件属性
- 利用DevExpress控件包中的GridControl做Master-Detail样式时,Detail表无法定位行的解决办法