正如繫結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(後台**中)新增:
private
void
pbpassword_passwordchanged(
object
sender, routedeventargs e)
private
static
void
setpasswordboxselection(passwordbox passwordbox,
int
start,
int
length)
);
}
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 這可能是出於安全性的考慮...