Win 10應用開發 分階段進行資料繫結

2022-01-10 06:51:00 字數 2684 閱讀 4889

使用x:bind擴充套件標記進行資料繫結,是在編譯階段完成,至於說效能優化方面,大概主要是優化cpu資源的使用,因為免去了執行階段進行繫結的過程。當然,使用這個標記僅僅是繫結上的優化,並不包括資料來源。資料來源的合理提取就得看開發者的策略了,如果你要提取很大批量的資料放到記憶體中,那麼,你是免不了要消耗大量記憶體的。這個事情,得看實際情況而定了,任何的優化都不是絕對的,個別情況下,不優化反而會更好。

x:bind在介面繫結不經常變更的情況下用(資料一旦顯示到介面,就不再改動),會好一些。如果資料更新頻繁,估計bind和binding的效果差不多。

在使用x:bind標記時,可以結合使用x:phase標記,該標記指定乙個整數值,該值是從0開始的,如0、1、2、3等。在資料載入時會根據x:phase的值來排序,即phase為0的先載入,1的次之,最後載入2的。phase的使用有點像zindex值。phase值越大,就越放在後面載入,但值不一定要連續的,你可以設定成0、1、3、4、7。

為啥要弄這玩意兒呢。主要是針對某個資料來源例項的某些屬性可能無法立刻返回內容的情況。比如,要載入乙個山寨汽車的產品列表,可能每款汽車資訊都會配上一張,以方便使用者檢視汽車的外觀和造型。我們知道,如果資料是從網路上提取的話,可能會載入得較慢。要是等所有物件的所有屬性都載入完成再顯示到介面上,給使用者的感覺很不好,你的應用就有可能被差評。

如果用上了x:phase值,先把汽車型號、山寨廠商名字、配置引數等先載入,phase設定為0;由於比較慢,就將它設為phase = 1。如此一來,資料在提取時不再等待載入就直接顯示到介面上;隨後,當屬性返回有效值了再慢慢把顯示出來。雖然使用者看不到山寨車的,但至少可以看到汽車的相關資訊了。

好,說了那麼多廢話,咱們還是上例項吧。

首先,我定義了乙個student類,表示一位學生資訊,至於說是哪個學校的學生,你就別管了,反正不是女子學校。

public

class

student

set

}public

string

city

set

}public

intage

set

}public

float

height

set }}

可能有小夥伴看不懂各個屬性的get訪問器裡面是啥意思,如果真是這樣,老周覺得應該拉你去批鬥,說明你沒認真學.net 4.x。task.delay方法表示延遲n毫秒的意思,就相當於以前的thread.sleep方法。不過嘛,task的delay方法的返回型別是task,這說明它是可以非同步等待的,但是,await是用在方法中的,不用於屬性,所以為了讓**在這裡暫停n毫秒,我還得呼叫一下wait方法,這樣一來,**就會停在那裡,等delay完了才會繼續執行。

為什麼我要在屬性的get訪問器中拖延一下時間呢,這還用說嘛,當然是為了模擬網速慢,載入慢的情況。

隨後,用xaml宣告列表控制項,並設計一下它的項資料模板,以便能顯示student類的各個屬性的值。

<

listview

name

="lv"

reordermode

="enabled"

>

<

listview.itemtemplate

>

<

datatemplate

x:datatype

="local:student"

>

<

stackpanel

>

<

textblock

fontweight

="bold"

fontsize

="24"

text=""

x:phase

="0"

/>

<

textblock

text=""

x:phase

="1"

/>

<

textblock

text=""

x:phase

="2"

/>

<

textblock

text=""

x:phase

="3"

/>

stackpanel

>

datatemplate

>

listview.itemtemplate

>

listview

>

各個值的phase分別是0、1、2、3,讓這幾個值產生載入的先後順序。如果不顯式設定x:phase值,就表示它使用預設值0,即立即載入。各位要注意,如果你在datatemplate模板中用x:bind標記進行繫結,那麼,在datatemplate上必須用x:datatype標記指明資料來源物件的型別。因為這種繫結是在編譯階段完成的,編譯必須知道資料來源的確切型別,不然的話,容易造成型別安全問題。更何況,你不這樣指定,編譯器是不會讓你編譯的。

執行應用程式後,你會看到,學生姓名馬上就出來了,但其他屬性值會慢慢出現。請看下圖表演。

好了,廢話就說到這兒了,估計該知識點沒什麼難度的,別告訴我你沒看懂。如果有這個示例你還不懂,那老周只好「傷心秦漢,生靈塗炭,讀書人一聲長嘆」了。

其實,老周這個示例是有超級大bug的,但為了簡單演示,就不管那麼多了。

Win 10 應用開發 應用預啟動

所謂預啟動,其實你一看那名字就知道是啥意思了,這是直接譯,也找不到比這個叫法更簡練的詞了。在系統資源允許的情況下 比如電池電量充足,有足夠的記憶體空間 系統會把使用者常用的應用程式在後台啟動,但不會顯示使用者介面。在預啟動時,可以事先初始化一些資料,等到使用者正式啟動應用時,呈現介面的效率就有所提公...

Win 10 應用開發 應用預啟動

所謂預啟動,其實你一看那名字就知道是啥意思了,這是直接譯,也找不到比這個叫法更簡練的詞了。在系統資源允許的情況下 比如電池電量充足,有足夠的記憶體空間 系統會把使用者常用的應用程式在後台啟動,但不會顯示使用者介面。在預啟動時,可以事先初始化一些資料,等到使用者正式啟動應用時,呈現介面的效率就有所提公...

Win 10 應用開發 透視效果

所謂透視效果,就是在平面座標空間上模擬出 好像 三維的效果。要是老周沒有記錯的話,以前在寫wp8相關的內容時寫過,uwp中的透視方法也保留了以前的do法,其實這玩意兒是從 silverlight 沿襲下來的。不過,uwp新增了一些三維變換相關的東東,這個老周以後會跟大夥兒聊,今天咱們還是先了解透視效...