• 【转】WPF中PasswordBox控件的Password属性的数据绑定


    英文原文:http://www.wpftutorial.net/PasswordBox.html

    中文原文:http://blog.csdn.net/oyi319/article/details/6551532

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

    注:代码摘自:http://www.wpftutorial.net/PasswordBox.html

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

    那么XAML绑定代码如下:

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

    MVVM模式XAML窗口声明代码如下:

     1 <Window
     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:Oyi319.Helper" 
     5     xmlns:ViewModels="clr-namespace:Oyi319.ViewModels"
     6     x:Class="Oyi319.Views.Login"
     7     x:Name="Window"
     8     Title="Login"
     9     FocusManager.FocusedElement="{Binding ElementName=txt_UserName}" >
    10     <Window.DataContext>
    11         <ViewModels:LoginViewModel />
    12     </Window.DataContext>
    13 </Window>
  • 相关阅读:
    硬盘数据丢失,到底该如何修复?
    硬盘数据丢失,到底该如何修复?
    CMD命令操作MySql数据库详解
    CMD命令操作MySql数据库详解
    Java中Calendar.DAY_OF_WEEK、DAY_OF_MONTH需要减一的原因
    Java中Calendar.DAY_OF_WEEK、DAY_OF_MONTH需要减一的原因
    java中JFrame类中函数addWindowListener(new WindowAdapter)
    java中JFrame类中函数addWindowListener(new WindowAdapter)
    关于java数据库章节connection连接不成功的时候!!!
    树莓派4之点亮led
  • 原文地址:https://www.cnblogs.com/h82258652/p/4088433.html
Copyright © 2020-2023  润新知