原文:
uwp開發入門(三)——擴充套件標記
上週打爐石打得太晚……忘記更新了,本週補上。本篇我們講一下擴充套件標記。擴充套件標記也是windows 10 uinversal 新增的內容,按官方的說法是 的備用選項。雖然 缺少 中的一些功能,但它執行時所花費的時間和使用的記憶體量均比 要少,且支援更好的除錯。
首先我們來看一下的基本用法:
<page
x:class
="xbindtest.mainpage"
xmlns
=""xmlns:x
=""xmlns:local
="using:xbindtest"
xmlns:d
=""xmlns:mc
=""mc:ignorable
="d"
>
<
grid
background=""
>
<
textblock
text=""
>
textblock
>
grid
>
page
>
public和原先使用的binding最大的不同,就是不需要設定datacontext,而是從page(或者usercontrol)來尋找屬性進行繫結。值得注意的是,可能是為了強調效能,的預設繫結mode是onetime,而不是oneway。之前binding寫得太多的各位可能會思維定勢而忘記修改mode。sealed
partial
class
mainpage : page
public
mainpage()
}
有的同學可能會說,既然以page作為繫結的預設源,是不是意味著就木有viewmodel啥事了,以後**就一股腦都寫在page.cs裡了?當然不是啦,因為每個page裡寫個viewmodel是很常見的事情啊,再通過viewmodel來進一層繫結屬性就可以了。
publicsealed
partial
class
hostview : page
public
hostview()
}
<還有乙個非常神奇的地方,就是xaml裡寫了就可以直接在design檢視顯示出來。而binding則是沒有辦法做到的,這是因為 在編譯時就已經生成了一些奇怪的**(位於對應的page.g.cs檔案,該檔案可以在obj資料夾中找到)而 則是在執行時才獲取物件進行繫結。所以才能具有更好的效能。page
x:class
="quizgame.view.hostview"
...
>
<
button
content=""
...
/>
page
>
在g.cs檔案中我們可以找到這樣的**:
private在需要的時候,就可以打個斷點進行除錯了,雖然我覺得然並卵……void update_helloworld(global::system.string obj, int
phase)
}public
static
void set_windows_ui_xaml_controls_textblock_text(global::windows.ui.xaml.controls.textblock obj, global::system.string value, string
targetnullvalue)
obj.text = value ?? global
::system.string.empty;
}
接下來說的非常重要,就是在datatemplate中如何使用,稍稍有別於在page的xaml裡,在datatemplate中使用必須要表明繫結的資料型別:
<還是那句話,是在編譯時處理繫結的,必須明確知道資料型別才能在g.cs裡生成一些奇怪的輔助資訊。listview
itemssource=""
>
<
listview.itemtemplate
>
<
datatemplate
x:datatype
="local:person"
>
<
textblock
text=""
>
textblock
>
datatemplate
>
listview.itemtemplate
>
listview
>
看看下面這張截圖,因為型別都在g.cs裡都生成好了,所以design檢視裡才能根據xaml生成對應的展示資料,這是binding所做不到的。
上面說了這麼多的優點,你是不是有些心動了呢?但是!終於到了說但是的時間了,還是存在一些比不過binding的地方:
除了以上這些,還會誘使一種叫做**潔癖的疾病發生。你想啊,都把datatype寫到xaml裡了,這特麼眼裡還有沒有mvvm和王法了,型別都暴露了一點隱私都沒有了。底下寫service的同事(請不要誤會底下的意思,這不是體位描寫)說:哎喲不好意思,我重構**把型別改了。你一看要改n個xaml檔案,抄起一把椅子就砸過去了,然後就被派出所帶走了……
所以這裡還是需要通過介面來減少依賴,舉個例子在mainpage裡通過iviewmodel,而不是具體的mainviewmodel來繫結,在datatemplate裡通過iperson,而不是person型別。這部分是物件導向的知識了,就不展開討論了。
本篇到此打住,再去開一盤爐石,我就不信薩滿打不上傳說……
PHP CPP開發擴充套件(三)
php cpp是乙個用於開發php擴充套件的c 庫。本節講解php函式形參相關的實現。有時候,我們需要指定函式的形參是陣列或者指定的,那麼在php cpp裡是否可以指定函式的引數型別呢?答案是可以的。示例 date 2018 7 include void example php parameters...
PHP CPP開發擴充套件(三)
php cpp是乙個用於開發php擴充套件的c 庫。本節講解php函式形參相關的實現。有時候,我們需要指定函式的形參是陣列或者指定的,那麼在php cpp裡是否可以指定函式的引數型別呢?答案是可以的。示例 date 2018 7 include void example php parameters...
PHP擴充套件開發入門
寫乙個最簡單的將字串全部變成大寫的函式 function my toupper str echo my toupper demo 現在我們開發乙個php擴充套件,實現my toupper的功能。step1 php提供了乙個擴充套件框架生成器 ext skel,這個工具在php原始碼的ext目錄 我的...