WPF 實現密碼框的密碼繫結

2021-09-19 21:08:09 字數 2606 閱讀 5563

原文:

[wpf]實現密碼框的密碼繫結

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

WPF 實現密碼框的密碼繫結

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

WPF 實現密碼框的密碼繫結

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