簡體   English   中英

wpf 數據上下文中的 {binding} 和繼承有什么不同?

[英]What is different between {binding} and inherit in wpf datacontext?

我有一些關於數據上下文綁定的問題。

我的應用程序有虛擬化列表框。

有時 Button 不會觸發 dataContextChanged。

所以我找到了這個。

<Grid DataContext={Binding ~~>
  <Button DataContext={Binding}/>
 </Grid>
 <Grid DataContext={Binding ~~>
  <Button/>
 </Grid>

我的代碼是第一個。 但有時它不會觸發 DataContextChanged,所以我將代碼更改為第二個。

snoop 說第一個來自繼承,第二個來自 parentTemplate。

第一個和第二個有什么不同?

TL;博士:

SomeProperty={Binding} 會將 SomeProperty 綁定到父級的整個 DataContext object。 SomeProperty 不必是子級的 DataContext。 在這種特殊情況下,我認為沒有任何區別,因為 DataContext 無論如何都是繼承的。 您只是明確說明,什么已經是默認設置。 在這里討論

更多信息:

這是官方文檔的解釋

 <Button DataContext={Binding}/>

只要綁定已經有一個數據上下文(例如,來自父元素的繼承數據上下文),並且該上下文返回的任何項或集合都適合綁定而不需要進一步修改路徑,綁定聲明就可以具有根本沒有子句:{Binding}。 這通常是為數據樣式指定綁定的方式,其中綁定作用於集合。 有關詳細信息,請參閱使用整個對象作為綁定源

這里開始

<ListBox ItemsSource="{Binding}"
         IsSynchronizedWithCurrentItem="true"/>

上面的示例使用空綁定語法:{Binding}。 在這種情況下,ListBox 從父 DockPanel 元素(未在此示例中顯示)繼承 DataContext。 不指定路徑時,默認綁定到整個object。 換句話說,在此示例中,路徑已被省略,因為我們將 ItemsSource 屬性綁定到整個 object。 (有關深入討論,請參閱綁定到 collections 部分。)

通常,DataContext 繼承自父元素。 因此,在您的第二個示例中,按鈕從網格中獲取 DataContext。 例子

“ItemsControl”很特殊: 示例

我不知道~~是什么,這是要占位符嗎?

有關綁定和標記擴展的更多信息: Link1 Link2 Link3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM