2018 2 13 win10 uwp 繫結密碼

2021-09-29 20:10:02 字數 4602 閱讀 9845

title

author

date

createtime

categories

win10 uwp 繫結密碼

lindexi

2018-2-13 17:23:3 +0800

2018-2-13 17:23:3 +0800

win10 uwp

win10 下,密碼框無法繫結到viewmodel,password是不可以繫結。 我們可以自己使用簡單方法去繫結。

我們之前在wpf 使用繫結密碼框,我寫了一篇,關於如何繫結,我提供乙個我自己試了可以的類。

首先,我們新建乙個類,這個類是讓 passwordbox 可以繫結password。

uwp讓 passwordbox 可以繫結password 的乙個方法,其實我使用的和之前一樣。

我們新建靜態類,附件屬性,只是和之前有的小不一樣。

我們先寫乙個函式passwordchanged這個函式是 password 變化使用的,我們先判斷sender 是不是 passwordbox ,是的話我們就通知密碼改變。

通知使用setpassword(passwordbox, passwordbox.password);我們要先更新password,然後更新介面,但是我們設定password,會自動更新介面,一旦介面更新又更新 password,這樣不好,我們需要設定 updateing,如果是 true,就是我們介面更新,直接更新 password 。如果是 false,那麼是 password 更新介面。於是我們在 passwordchanged ,修改依賴屬性,必須新增是否後台修改密碼 isupdating ,如果是後台新增就需要設定他為 true,目的是可以讓前台修改通知,後台修改忽略,不然出現無限迴圈就不好。

setisupdating(passwordbox, true);

setpassword(passwordbox, passwordbox.password);

setisupdating(passwordbox, false);

然後寫private static void onpasswordpropertychanged(dependencyobject sender, dependencypropertychangedeventargs e)

這個函式是我們定義的乙個屬性變化時,判斷 sender 是不是 passwordbox ,是的話,因為我們繫結是雙向,所以先把passwordbox.passwordchanged -= passwordchanged取消,然後判斷是不是更新了,如果更新了,也就是完成更新if (!(bool)getisupdating(passwordbox))我們就把新的value給passwordbox.password,不管有沒更新,我們需要passwordbox.passwordchanged += passwordchanged

private

static

void

onpasswordpropertychanged(dependencyobject

sender,

dependencypropertychangedeventargs

e)

passwordbox.passwordchanged

+=passwordchanged;

}}

我們還需要乙個attach判斷使用者是不是要繫結,如果是 false ,就是和原來,不繫結

我們需要判斷 sender 是 passwordbox ,好像不是的話我們不需要做下,因為都是靜態,使用事件繫結,用的是 sender ,關於 sender 和 origin 其實是不同的,不過在這裡就使用 sender,不是路由事件。

我們判斷,在使用 oldvalue 是不是true,如果是的話,我們先把passwordbox.passwordchanged -= passwordchanged,不是的話不能passwordbox.passwordchanged -= passwordchanged,因為之前不是已經新增了,所以不可以再移除,即使新增了,也不會出錯。這樣在修改密碼就可以通過函式知道密碼已經修改,通過已經修改的密碼更新到附加屬性,就可以讓附加屬性得到密碼,繫結附加屬性,就可以讓vm得到值,於是這個核心就是這麼簡單。

判斷newvalue,如果是true,passwordbox.passwordchanged += passwordchanged;,這時就是繫結了,以後修改了密碼就可以知道了。

**可以複製到乙個檔案,注意需要使用他所在的name,使用xmlns引用需要用到

public

static

class

passwordboxhelper

public

static

string

getpassword(dependencyobject

element)

public

static

readonly

dependencyproperty

attachproperty

=dependencyproperty.registerattached(

"attach"

, typeof(bool), typeof(passwordboxhelper), new

propertymetadata(default(bool),attach));

public

static

void

setattach(dependencyobject

element, bool

value)

public

static

bool

getattach(dependencyobject

element)

public

static

readonly

dependencyproperty

isupdatingproperty

=dependencyproperty.registerattached(

"isupdating"

, typeof(bool), typeof(passwordboxhelper), new

propertymetadata(default(bool)));

public

static

void

setisupdating(dependencyobject

element, bool

value)

public

static

bool

getisupdating(dependencyobject

element)

private

static

void

onpasswordpropertychanged(dependencyobject

sender,

dependencypropertychangedeventargs

e)

passwordbox.passwordchanged

+=passwordchanged;}}

private

static

void

attach(dependencyobject

sender,

dependencypropertychangedeventargs

e)

改變前的值

if ((bool)e.oldvalue)//如果之前有繫結,我們就解綁

改變的值

if ((bool)e.newvalue)

}private

static

void

passwordchanged(object

sender, routedeventargs

e)

}}

我們的 viewmodel 有乙個屬性 password ,注意我們使用 binding 把他繫結到 passwordbox 的密碼。繫結的過程

不需要去做修改,直接加上view:passwordboxhelper.attach="true" view:passwordboxhelper.password=""

**很簡單,也就是把 不可繫結的 password 改為下面的屬性

<

passwordbox

view:passwordboxhelper.attach

="true"

view:passwordboxhelper.password=""

>

注意需要引用命名,好像屬性比較長,但是我也沒有好方法讓他比較好看

附加屬性使用的比較多,是不是需要我來寫乙個部落格說下什麼是附加屬性。

對於 wpf 幾乎和rt一樣的 附加屬性,如果沒有找到 好的部落格,直接去看 wpf就好啦,我在使用發現不需要去學新的東西就可以使用。

本文同時發在九幽專欄

win10 uwp 繫結密碼

win10 下,密碼框無法繫結到viewmodel,password是不可以繫結。我們可以自己使用簡單方法去繫結 我們之前在wpf 使用繫結密碼框,我寫了一篇,關於如何繫結,我提供乙個我自己試了可以的類。首先,我們新建乙個類,這個類是讓 passwordbox 可以繫結password。uwp讓 p...

win10 uwp 重啟軟體

在16299支援在軟體自己重啟,不需要讓使用者點選關閉然後啟動,雖然我還不知道這個有什麼用。本文告訴大家如何讓軟體關閉重新開啟 首先需要使用的版本是 16299 然後使用 requestrestartasync 方法就可以關閉軟體重新開啟。下面就是簡單的軟體 100 horizontalalignm...

win10 uwp 繫結密碼

win10 下,密碼框無法繫結到viewmodel,password是不可以繫結。我們可以自己使用簡單方法去繫結 我們之前在wpf 使用繫結密碼框,我寫了一篇,關於如何繫結,我提供乙個我自己試了可以的類。首先,我們新建乙個類,這個類是讓 passwordbox 可以繫結password。uwp讓 p...