WPF 實現密碼框的密碼繫結

2022-06-11 15:12:14 字數 2786 閱讀 3922

正如繫結textbox控制項的text屬性一樣, 我們希望能夠將passwordbox空間的password屬性進行繫結, 比如在mvvm模式中,這似乎是必須的, 但可惜的是, password屬性是不支援繫結的(不是依賴屬性, 也沒有實現inotifypropertychanged). 

這可能是出於安全性的考慮. 但在我們的系統為了實現view層密碼框中的密碼與後台其它層之間的密碼屬性之間的繫結, 可以採取如下思路: 將密碼框的密碼和某乙個緩衝區進行同步, 緩衝區在和後台進行繫結. 其中密碼框與緩衝區之間的同步可採用事件進行通知, 並將緩衝區打造成依賴屬性, 然後緩衝區就支援繫結了, 並給後台提供正確的密碼.

緩衝區可以是雜湊表或其他字典結構, 以便將密碼框和緩衝區中的密碼一 一對應起來, 也可以使attachproperty(附加屬性), 其實附加屬性的機制也就是對快取了的乙個大字典進行操作

public static class passwordboxbindinghelper

public static void setispasswordbindingenabled(dependencyobject obj, bool value)

public static readonly dependencyproperty ispasswordbindingenabledproperty =

dependencyproperty.registerattached("ispasswordbindingenabled", typeof(bool), 

typeof(passwordboxbindinghelper), 

new uipropertymetadata(false, onispasswordbindingenabledchanged));

private static void onispasswordbindingenabledchanged(dependencyobject obj, 

dependencypropertychangedeventargs e)}}

//when the passwordbox's password changed, update the buffer

static void passwordboxpasswordchanged(object sender, routedeventargs e)

}public static string getbindedpassword(dependencyobject obj)

public static void setbindedpassword(dependencyobject obj, string value)

public static readonly dependencyproperty bindedpasswordproperty =

dependencyproperty.registerattached("bindedpassword", typeof(string), 

typeof(passwordboxbindinghelper), 

new uipropertymetadata(string.empty, onbindedpasswordchanged));

//when the buffer changed, upate the passwordbox's password

private static void onbindedpasswordchanged(dependencyobject obj, 

dependencypropertychangedeventargs e)

}       

}在view層, 如下使用便可以了:

另外, 在更改了密碼框的密碼後, 需要手動更新密碼框插入符(caretindex)的位置, 可惜的是, 密碼框並沒有給我們提供這樣的屬性或方法(textbox有, passwordbox沒有), 可以採用下面的方法來設定:

private static void setpasswordboxselection(passwordbox passwordbox, int start, int length));}

在view中新增:

local:passwordboxbindinghelper.ispasswordbindingenabled="true"

local:passwordboxbindinghelper.bindedpassword=""

passwordchanged="pbpassword_passwordchanged"

/>

然後在view的cs(後台**中)新增:

privatevoidpbpassword_passwordchanged(objectsender, routedeventargs e)

privatestaticvoidsetpasswordboxselection(passwordbox passwordbox,intstart,intlength)

);

}

WPF 實現密碼框的密碼繫結

wpf 實現密碼框的密碼繫結 周銀輝 正如繫結textbox控制項的text屬性一樣,我們希望能夠將passwordbox空間的password屬性進行繫結,比如在mvvm模式中,這似乎是必須的,但可惜的是,password屬性是不支援繫結的 不是依賴屬性,也沒有實現inotifypropertyc...

WPF 實現密碼框的密碼繫結

原文 wpf 實現密碼框的密碼繫結 wpf 實現密碼框的密碼繫結 周銀輝正如繫結textbox控制項的text屬性一樣,我們希望能夠將passwordbox空間的password屬性進行繫結,比如在mvvm模式中,這似乎是必須的,但可惜的是,password屬性是不支援繫結的 不是依賴屬性,也沒有實...

WPF 實現密碼框的密碼繫結

正如繫結textbox控制項的text屬性一樣,我們希望能夠將passwordbox空間的password屬性進行繫結,比如在mvvm模式中,這似乎是必須的,但可惜的是,password屬性是不支援繫結的 不是依賴屬性,也沒有實現inotifypropertychanged 這可能是出於安全性的考慮...