由於問題Linking DataContext with another property in WPF的延續。什麼是DataContext?
在研究的最後我很驚訝地發現,當一個人寫這樣的事情:
<Label Content="{Binding Path=Name}" />
的DataContext
針對的Content
屬性綁定是Label
控制自己的!它仍然有效的事實是由於來自最近父級的DataContext值的默認繼承。
但是,如果你有這個標籤,包裹在一個自定義的控制,並且不希望將數據綁定到該控件的DataContext
財產,你會更容易喜歡有:
<Controls:SearchSettings Settings="{Binding Path=Settings}" />
而且這個給你。現在,你需要設置Settings
爲DataContext
爲SearchSettings
控制,爲Label
內綁定反對,但你不能,因爲這將引發再結合Settings
財產。
我看不到在使用不同來源的混合綁定屬性點:DataContext
,由ElementName
等 那麼,爲什麼我會永遠使用DataContext
?
嗨!感謝您的詳細解答。但。在你的例子中,我不喜歡的是你綁定了DataContext屬性本身。很可能我會將您的示例中的StackPanel提取到單獨的控件中。如果它的DataContext只是它的父類的DataContext的一個獨立部分,那麼它是有意義的,不是嗎?然後我不會綁定我的用戶控件的DataContext屬性,而是會擁有一個具有自描述名稱的特殊屬性。 (我的意思是什麼是特定控件的DataContext?我應該傳遞什麼?)這就是事情變得複雜了。 [待續] –
因爲我不會綁定DataContext屬性,所以它將從父控件中獲取。這意味着我不再能夠將自定義控件中的控件綁定到DataContext上,僅僅因爲我不知道里面有什麼(控件無法控制它的子類,以及它將接收的DataContext)。解決方案可以是從內部設置DataContext來控制(使用該特殊屬性的值)。 –
但是這會破壞控件本身的綁定,因爲正如你所指出的那樣,寫了'Content = {Binding Name}'綁定到'Label.DataContext.Name'而不是'Label.Parent。 DataContext.Name',就像我期望的那樣。 –