2012-10-22 117 views
2

我已經建立了一個基於WPF樹視圖的父對象屬性與綁定到用的RelativeSource

項目
-Subitem

如果選擇子項目,我想也顯示項的屬性。

<StackPanel Grid.Column="2" DataContext="{Binding ElementName=myTreeView, Path=SelectedItem}"> 
    <TextBox Text="{Binding Path=Name, Mode=TwoWay}" /> 
    <TextBox Text="{Binding RelativeSource={???} Path=Name, Mode=TwoWay}" /> 
</StackPanel> 

我想我需要使用RelativeSource語句,但不太清楚如何去做。

+0

什麼是被認爲是用於結合所述源的控制的類型? –

+0

這是一個TreeView,所以我想它會是TreeViewItem。 – Stef

+0

您可以爲您的實際TreeView及其內容提供XAML嗎? –

回答

4

JesseJames爲您提供了使用RelativeSource的正確方法,但您可以使用RelativeSource完成的最佳操作是綁定到TreeViewItem本身,它只是數據對象的容器,即ViewModel,意味着您將不會能夠訪問你的數據對象屬性(很容易)。

我認爲在這種情況下綁定到容器對象將打破您正在使用的視圖查看模型的方法。你最好的選擇是在ViewModel中創建一個Parent對象並綁定到該對象。所以,現在集合中的每個對象都有一個對它的父對象的引用,現在可以直接綁定它。

<StackPanel Grid.Column="2" DataContext="{Binding ElementName=myTreeView, Path=SelectedItem}"> 
    <TextBox Text="{Binding Path=Name, Mode=TwoWay}" /> 
    <TextBox Text="{Binding Parent.Name}" /> 
</StackPanel> 

另請注意,SelectedItem屬性返回您的數據對象而不是容器。

+0

這個工程!謝謝。 (我添加了一個屬性Parent到SubItem並使用SubItemCollection.Add(新子項目(name,this);)調用構造函數。 – Stef

5
{Binding RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}, Path=Name, Mode=TwoWay} 
+0

typeOfAncestor應該是什麼? – Stef

+1

這是您想要綁定到的控件的類型。相對源代碼遍歷可視化樹,直到找到x的第一個控件:Type typeOfAncestor。 – Batuu

+0

我需要綁定到相對對象和Item,ItemViewModel等不起作用。 – Stef

0

我看着你的代碼,試着簡單地綁定到Name。看來,你的數據方面應該已經被設置爲TreeViewItem由於以下行:<StackPanel Grid.Column="2" DataContext="{Binding ElementName=myTreeView, Path=SelectedItem}">。綁定可能在邏輯樹的更上方,這就是爲什麼你的綁定失敗。

+0

只是結合名返回所選擇的項目。 – Stef

+0

啊我想我誤解了你的問題。我會更多地考慮這個問題並回復你。 –

相關問題