public override void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { var passwordBox = (PasswordBox)sender; var bindingMarshaller = passwordBox.GetValue(_passwordBindingMarshallerProperty) as PasswordBindingMarshaller; if (bindingMarshaller == null) { bindingMarshaller = new PasswordBindingMarshaller(passwordBox); passwordBox.SetValue(_passwordBindingMarshallerProperty, bindingMarshaller); } bindingMarshaller.UpdatePasswordBox(e.NewValue as SecureString); }
private static void AttachedPropertyValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { // we'll need to hook up to one of the element events // in order to allow the GC to collect the control, we'll wrap the event handler inside an object living in an attached property // don't be tempted to use the Unloaded event as that will be fired even when the control is still alive and well (e.g. switching tabs in a tab control) var passwordBox = (PasswordBox)d; if (!(passwordBox.GetValue(PasswordBindingMarshallerProperty) is PasswordBindingMarshaller bindingMarshaller)) { bindingMarshaller = new PasswordBindingMarshaller(passwordBox); passwordBox.SetValue(PasswordBindingMarshallerProperty, bindingMarshaller); } bindingMarshaller.UpdatePasswordBox(e.NewValue as SecureString); }