[wpf]實現密碼框的密碼繫結
周銀輝
正如繫結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),
newuipropertymetadata(
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),
newuipropertymetadata(
string
.empty, onbindedpasswordchanged));
//when the buffer changed, upate the passwordbox's password
private
static
void
onbindedpasswordchanged(dependencyobject obj,
dependencypropertychangedeventargs e)
} }
在view層, 如下使用便可以了:
<
passwordbox
helpers:passwordboxbindinghelper.ispasswordbindingenabled
="true"
helpers:passwordboxbindinghelper.bindedpassword="
"/>
另外, 在更改了密碼框的密碼後, 需要手動更新密碼框插入符(caretindex)的位置, 可惜的是, 密碼框並沒有給我們提供這樣的屬性或方法(textbox有, passwordbox沒有), 可以採用下面的方法來設定:
private
static
void
setpasswordboxselection(passwordbox passwordbox,
intstart,
intlength));}
WPF 實現密碼框的密碼繫結
原文 wpf 實現密碼框的密碼繫結 wpf 實現密碼框的密碼繫結 周銀輝正如繫結textbox控制項的text屬性一樣,我們希望能夠將passwordbox空間的password屬性進行繫結,比如在mvvm模式中,這似乎是必須的,但可惜的是,password屬性是不支援繫結的 不是依賴屬性,也沒有實...
WPF 實現密碼框的密碼繫結
正如繫結textbox控制項的text屬性一樣,我們希望能夠將passwordbox空間的password屬性進行繫結,比如在mvvm模式中,這似乎是必須的,但可惜的是,password屬性是不支援繫結的 不是依賴屬性,也沒有實現inotifypropertychanged 這可能是出於安全性的考慮...
WPF 實現密碼框的密碼繫結
正如繫結textbox控制項的text屬性一樣,我們希望能夠將passwordbox空間的password屬性進行繫結,比如在mvvm模式中,這似乎是必須的,但可惜的是,password屬性是不支援繫結的 不是依賴屬性,也沒有實現inotifypropertychanged 這可能是出於安全性的考慮...