附加属性
WPF的 PasswordBox 的 Password 属性不是依赖属性,不能绑定。为了实现这个控件的MVVM模式,可以利用附加属性实现 PasswordBox 控件的绑定使用。其主要的思想是,设计一个PasswordBoxHelper 类型,并在其中定义一个附加属性,这个属性的名称也叫 Password,将来作为 PasswordBox 控件的附加属性。
/// <summary> /// PasswordBox扩展属性 /// </summary> public class PasswordBoxHelper { public static string GetPwd(DependencyObject obj) { return (string)obj.GetValue(PasswordProperty); } public static void SetPwd(DependencyObject obj, string value) { obj.SetValue(PasswordProperty, value); } public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached( "Pwd", typeof(string), typeof(PasswordBoxHelper), new PropertyMetadata("", OnPasswordPropertyChangedCallback) ); /// <summary> /// 自定义附加属性发生变化,改变Password属性 /// </summary> /// <param name="d"></param> /// <param name="e"></param> private static void OnPasswordPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { PasswordBox passwordBox = (PasswordBox)d; string newPwd = (string)e.NewValue; if (passwordBox != null && !passwordBox.Password.Equals(newPwd)) { passwordBox.PasswordChanged -= PasswordBox_PasswordChanged;
passwordBox.Password = e.NewValue?.ToString() ?? string.Empty; passwordBox.PasswordChanged += PasswordBox_PasswordChanged; } } private static void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { if (sender is PasswordBox passwordBox) { SetPwd(passwordBox, passwordBox.Password); } } }
<PasswordBox helper:PasswordBoxHelper.Pwd="{Binding Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" md:HintAssist.Hint="请输入密码"/>

                
            
        
浙公网安备 33010602011771号