我有一些關于資料背景關系系結的問題。
我的應用程式有虛擬化串列框。
有時 Button 不會觸發 dataContextChanged。
所以我找到了這個。
<Grid DataContext={Binding ~~>
<Button DataContext={Binding}/>
</Grid>
<Grid DataContext={Binding ~~>
<Button/>
</Grid>
我的代碼是第一個。但有時它不會觸發 DataContextChanged,所以我將代碼更改為第二個。
snoop 說第一個來自繼承,第二個來自 parentTemplate。
第一個和第二個有什么不同?
uj5u.com熱心網友回復:
TL;博士:
SomeProperty={Binding} 將 SomeProperty 系結到父級的整個 DataContext 物件。SomeProperty 不必是子級的 DataContext。在這種特殊情況下,我認為沒有任何區別,因為 DataContext 無論如何都是繼承的。您只是明確說明,什么已經是默認設定。在這里討論
更多資訊:
這是官方檔案的解釋
<Button DataContext={Binding}/>
只要系結已經有一個資料背景關系(例如,來自父元素的繼承資料背景關系),并且該背景關系回傳的任何項或集合都適合系結而不需要進一步修改路徑,系結宣告就可以具有根本沒有子句:{Binding}。這通常是為資料樣式指定系結的方式,其中系結作用于集合。有關詳細資訊,請參閱使用整個物件作為系結源。
從這里開始
<ListBox ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="true"/>
上面的示例使用空系結語法:{Binding}。在這種情況下,ListBox 從父 DockPanel 元素(未在此示例中顯示)繼承 DataContext。不指定路徑時,默認系結到整個物件。換句話說,在此示例中,路徑已被省略,因為我們將 ItemsSource 屬性系結到整個物件。(有關深入討論,請參閱系結到集合部分。)
通常,DataContext 繼承自父元素。因此,在您的第二個示例中,按鈕從網格中獲取 DataContext。例子
“ItemsControl”很特殊:示例
我不知道~~是什么,這是要占位符嗎?
有關系結和標記擴展的更多資訊: Link1 Link2 Link3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/415528.html
標籤:
