Click here to Skip to main content
13,868,937 members
Click here to Skip to main content
Add your own
alternative version


14 bookmarked
Posted 10 Jun 2009
Licenced CPOL

Binding Passwords

, 29 Jun 2009
Rate this:
Please Sign up or sign in to vote.
Binding passwords

Those who've been following my blog and conversations with the WPF Disciples know that I love the databinding power of WPF, and in almost all cases, I'm a very happy bunny. There is one stain in the awe inspiring goodness that is bound applications, and that’s the PasswordBox. Superficially, this control looks like a textbox, but there is a problem when you write MVVM applications and rely on binding the way I do; you can't bind to it. Yes, you heard it right, you can't bind with a PasswordBox.

There’s a good reason for this lack of binding – PasswordBox.Password is not a Dependency Property, ostensibly because this would result in the password being stored in clear text in memory, which is a potential security concern. If, however, you aren't too worried about this potential security breach, there is a workaround. Good news, folks – the following class (taken from my forthcoming Twitter client Songbird) is a way to perform binding with the PasswordBox.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace SongBird.Infrastructure
    /// <summary>
    /// This class adds binding capabilities to the standard WPF PasswordBox.
    /// </summary>
    public class BoundPasswordBox
        #region BoundPassword
        private static bool _updating = false;

        /// <summary>
        /// BoundPassword Attached Dependency Property
        /// </summary>
        public static readonly DependencyProperty BoundPasswordProperty =
                new FrameworkPropertyMetadata(string.Empty, OnBoundPasswordChanged));

        /// <summary>
        /// Gets the BoundPassword property.
        /// </summary>
        public static string GetBoundPassword(DependencyObject d)
            return (string)d.GetValue(BoundPasswordProperty);

        /// <summary>
        /// Sets the BoundPassword property.
        /// </summary>
        public static void SetBoundPassword(DependencyObject d, string value)
            d.SetValue(BoundPasswordProperty, value);

        /// <summary>
        /// Handles changes to the BoundPassword property.
        /// </summary>
        private static void OnBoundPasswordChanged(
            DependencyObject d,
            DependencyPropertyChangedEventArgs e)
            PasswordBox password = d as PasswordBox;
            if (password != null)
                // Disconnect the handler while we're updating.
                password.PasswordChanged -= PasswordChanged;

            if (e.NewValue != null)
                if (!_updating)
                    password.Password = e.NewValue.ToString();
                password.Password = string.Empty;
            // Now, reconnect the handler.
            password.PasswordChanged += new RoutedEventHandler(PasswordChanged);

        /// <summary>
        /// Handles the password change event.
        /// </summary>
        static void PasswordChanged(object sender, RoutedEventArgs e)
            PasswordBox password = sender as PasswordBox;
            _updating = true;
            SetBoundPassword(password, password.Password);
            _updating = false;


Using it couldn't be simpler, just add a reference to the namespace in your XAML, and update your PasswordBox with the BoundPasswordBox class. You've now got a bindable PasswordBox.





    password:BoundPasswordBox.BoundPassword="{Binding Path=Password,



This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Pete O'Hanlon
United Kingdom United Kingdom
A developer for over 30 years, I've been lucky enough to write articles and applications for Code Project as well as the Intel Ultimate Coder - Going Perceptual challenge. I live in the North East of England with 2 wonderful daughters and a wonderful wife.

I am not the Stig, but I do wish I had Lotus Tuned Suspension.

You may also be interested in...

Comments and Discussions

QuestionPasswordBox.Password Pin
jperlinski21-Jan-13 5:31
memberjperlinski21-Jan-13 5:31 
QuestionThanks! Pin
cruzanPC3-May-12 4:45
membercruzanPC3-May-12 4:45 
GeneralMy vote of 5 Pin
RobCroll21-Feb-11 16:52
memberRobCroll21-Feb-11 16:52 
GeneralBoundPasswordProperty default value Pin
sbhl1-Sep-10 23:37
membersbhl1-Sep-10 23:37 
GeneralRe: BoundPasswordProperty default value Pin
Pete O'Hanlon1-Sep-10 23:46
protectorPete O'Hanlon1-Sep-10 23:46 
GeneralRe: BoundPasswordProperty default value Pin
sbhl2-Sep-10 0:10
membersbhl2-Sep-10 0:10 
GeneralRe: BoundPasswordProperty default value Pin
sbhl2-Sep-10 1:01
membersbhl2-Sep-10 1:01 
GeneralRe: BoundPasswordProperty default value Pin
sbhl2-Sep-10 3:39
membersbhl2-Sep-10 3:39 
GeneralGreat! Pin
Paul Eie12-Apr-10 1:06
memberPaul Eie12-Apr-10 1:06 
GeneralRe: Great! Pin
Pete O'Hanlon12-Apr-10 2:40
protectorPete O'Hanlon12-Apr-10 2:40 
QuestionIs there any reason the binding password code not work? Pin
JJChen4019-Jun-09 16:22
memberJJChen4019-Jun-09 16:22 
AnswerRe: Is there any reason the binding password code not work? Pin
Pete O'Hanlon21-Jun-09 12:02
protectorPete O'Hanlon21-Jun-09 12:02 
GeneralRe: Is there any reason the binding password code not work? [modified] Pin
JJChen403-Jul-09 8:29
memberJJChen403-Jul-09 8:29 
Generalthanks. Pin
Michael Sync10-Jun-09 16:54
memberMichael Sync10-Jun-09 16:54 
GeneralRe: thanks. Pin
Pete O'Hanlon10-Jun-09 22:54
protectorPete O'Hanlon10-Jun-09 22:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web06 | 2.8.190214.1 | Last Updated 29 Jun 2009
Article Copyright 2009 by Pete O'Hanlon
Everything else Copyright © CodeProject, 1999-2019
Layout: fixed | fluid