当前位置: 首页 > news >正文

5.4.1 Password控件的Password属性绑定问题

        WPF的 PasswordBox 的 Password 属性是一个常规的 CLR 属性,而不是依赖属性(DependencyProperty),因此不能直接使用 WPF 的数据绑定机制

        下图所示:

         注意2个事项:

        1.使用的是” DependencyProperty.RegisterAttached“

        2.绑定时 双向绑定:{Binding  loginModel.Password, Mode=TwoWay}        

 public class NotifyBase : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;public void DoNotify([CallerMemberName]string propName=""){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));}} public class LoginModel : NotifyBase{private string _userName;public string UserName { get => _userName;set { _userName = value;this.DoNotify();}        }private string _password;public string Password{get => _password;set{_password = value;this.DoNotify();}}} public class LoginViewModel{public LoginModel loginModel { get; set; }public CommandBase CloseWindowCommand { get; set; }public LoginViewModel(){this.loginModel = new LoginModel();this.loginModel.UserName = "abc";this.loginModel.Password = "123456";this.CloseWindowCommand = new CommandBase();this.CloseWindowCommand.DoExecute = new Action<object>(o =>{(o as Window).Close();});this.CloseWindowCommand.DoCanExecute=new Func<object, bool>(o=> { return true; });}}
 public class PasswordHelper{// Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...public static readonly DependencyProperty PasswordProperty =DependencyProperty.RegisterAttached("Password", typeof(string), typeof(PasswordHelper), new FrameworkPropertyMetadata("", OnPasswordChanged));public static string GetPassword(DependencyObject d){return d.GetValue(PasswordProperty).ToString();}public static void SetPassword(DependencyObject d,string value){d.SetValue(PasswordProperty, value);}/// <summary>/// 当设置此处PasswordProperty时--->更新到界面上。/// </summary>/// <param name="d"></param>/// <param name="e"></param>private static void OnPasswordChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){PasswordBox password = d as PasswordBox;password.PasswordChanged -= Password_PasswordChanged;if (!_isUpdating)password.Password = e.NewValue.ToString();password.PasswordChanged += Password_PasswordChanged;}// Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...public static readonly DependencyProperty AttachProperty =DependencyProperty.RegisterAttached("Attach", typeof(bool), typeof(PasswordHelper), new PropertyMetadata(default(bool), OnAttached));public static bool GetAttach(DependencyObject d){return (bool)d.GetValue(AttachProperty);}public static void SetAttach(DependencyObject d, bool value){d.SetValue(AttachProperty, value);}static bool _isUpdating = false;/// <summary>/// 当设置Attach值时,触发此处的函数。/// </summary>/// <param name="d"></param>/// <param name="e"></param>private static void OnAttached(DependencyObject d, DependencyPropertyChangedEventArgs e){PasswordBox password = d as PasswordBox;password.PasswordChanged += Password_PasswordChanged;}/// <summary>/// UI上password的变化-->表用此函数/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private static void Password_PasswordChanged(object sender, RoutedEventArgs e){PasswordBox passwordbox = sender as PasswordBox;_isUpdating = true;SetPassword(passwordbox, passwordbox.Password);_isUpdating = false;}}
  <PasswordBox Name="passwordbox" Width="200" Margin="12,0,0,0" VerticalAlignment="Center"common:PasswordHelper.Attach="True"common:PasswordHelper.Password="{Binding  loginModel.Password, Mode=TwoWay}"/>

相关文章:

  • 06 GE Modifier
  • 【AI论文】对人工智能生成文本的稳健和细粒度检测
  • 性价比超高的 英伟达Tesla T4卡 如何解决散热问题?
  • Ubuntu 22.04 更换 Nvidia 显卡后启动无法进入桌面问题的解决
  • OpenAPI 3.0学习笔记
  • 【Redis】了解Redis
  • Java Web项目(一)
  • Java29:Spring MVC
  • 积木报表查询出现jdbc.SQLServerException: 对象名 ‘user_tab_comment 的解决方法
  • Federated Weakly Supervised Video Anomaly Detection with Multimodal Prompt
  • SpringBoot集成Kafka详解
  • 【锂电池SOH估计】SVM支持向量机锂电池健康状态估计,锂电池SOH估计(Matlab完整源码和数据)
  • 零点、驻点、拐点、极值点、最值点的定义、几何意义、求解方法
  • 2025年4月19日-得物算法岗春招笔试题-第二题
  • 项目预期管理:超越甘特图,实现客户价值交付
  • The_Planets_Earth靶场笔记(VulnHub)
  • 996引擎-拓展变量:物品变量
  • python:循环语句 while循环,for遍历循环,break,continue,else,嵌套循环(打印矩形、三角形,九九乘法表)
  • AI与思维模型【68】——排列组合
  • ASP.NET 0~1学习
  • 云南巧家警方抓获一名网逃人员:带70余万现金“隐居”山洞,昼伏夜出
  • 国家卫健委:无资质机构严禁开展产前筛查
  • 全球在役最大火电厂被通报
  • 今年一季度,上海对东盟进出口总值同比增长7.1%
  • 花卉引流+商场促销,上海浦东用“花经济”带动“消费热”
  • 解除近70家煤电厂有毒物质排放限制,特朗普能重振煤炭吗?