2011-12-05 68 views
0

這是一件好事,我不介意感到愚蠢。在數據層次結構中綁定三個級別

我想綁定到我的視圖模型上的ObservableCollection。數據層次結構如下所示:父 - 包含 - 子對象的列表。沒什麼複雜。

在我的XAML中樹的最外面的網格我建立一個鏈接到視圖模型:

<Grid DataContext="{StaticResource src}"> 

是的,SRC並引用視圖模型,並在出現問題之前文本框做工精細的二十幾綁定。我的Xaml樹中沒有另一個DataContext。現在我來到一個簡單的文本框。我想將文本框文本綁定到child.property。

這工作:

<TextBlock 
    DataContext="{Binding Parent}" 
    Text="{Binding Path=Child.Property}" 
    Style="{StaticResource headerMajor}" 
    /> 

這不起作用:

<TextBlock 
    Text="{Binding Source=Parent,Path=Child.Property}" 
    Style="{StaticResource headerMajor}" 
    /> 

我以爲他們是說同樣的事情的兩個方面。通常我想了一會兒,然後繼續編碼。不過,我讀過的一些建議提到,埋在Xaml控件中的DataContext屬性可能導致難以發現的錯誤。

請解釋爲什麼一個人工作,另一個不工作。這將有助於我掌握整個具有約束力的話題。

吉姆

+0

請看[編輯幫助](http://stackoverflow.com/editing-help#code)。 –

回答

1

Source是保持用作源用於結合一個object一個屬性,它不能解決的媒體資源。因此,您的綁定正在尋找字符串"Parent"上的屬性路徑Child.Property,請參閱問題?

+0

所以現在我很困惑。我以爲我明白那句話的意思。我指定的源是一個包含子對象的對象。我顯然還沒有明白。我所有使用Source =部分綁定的嘗試都始終在這個項目上失敗。請再試一次來解釋應該指定爲Source =:view model?家長?孩子?如果答案是視圖模型,那我該如何找到孩子? – JimBoone

+0

@ user858233:你應該只在很少的情況下使用'Source',你應該閱讀我鏈接到的文檔,它的主要用例是綁定到使用'StaticResource'標記擴展指定爲資源的對象,例如。 'Source = {StaticResource ColorResource}'。在這裏您可以將綁定更改爲僅使用路徑Parent.Child.Property(這聽起來有點無意義,因爲它應該與「Property」相同。 –

+0

@ user858233:綁定路徑始終是相對於源的,隱式如果你沒有指定任何其他的東西,那麼就是當前的'DataContext',如果你指定了一個源,'DataContext'沒有被使用。源是'Source','RelativeSource'和'ElementName',選擇一個或者沒有。 –

相關問題