2011-03-01 39 views
0

我有這樣一個xml:綁定XML數據到一個TreeView

<root> 
    <settings> 
    .... 
    ... 
    .. 
    </settings> 
    <cards> 
    <card name="firstcard"> 
     <question>bla</question> 
     <answer>blub</answer> 
    </card> 
    <card name="nextcard"> 
     <question>bla</question> 
     <answer>blub</answer> 
    </card> 
    </cards> 
</root> 

,我將其綁定到一個TreeView顯示我卡的名字和子項。另外我會將它綁定到一個文本框來編輯節點(問題,答案)。我發現在計算器的描述:Two-way binding of Xml data to the WPF TreeView但我不能將其更改爲我的需求:-( 下面是我的最後一次嘗試:

<Window.Resources> 
    <HierarchicalDataTemplate DataType="cards" ItemsSource="{Binding XPath=card}"> 
     <TextBox Text="cards" /> 
    </HierarchicalDataTemplate> 
    <HierarchicalDataTemplate DataType="card"> 
     <StackPanel> 
      <TextBox Text="{Binding XPath=question}"></TextBox> 
      <TextBox Text="{Binding XPath=answer}" Margin="0,0,0,15"></TextBox> 
     </StackPanel> 
    </HierarchicalDataTemplate> 
    <XmlDataProvider x:Key="dataxml" XPath="root/cards" Source="path\cards.xml" /> 
</Window.Resources> 
.. 
... 
    <Label Content="question:"/> 
    <TextBox DataContext="{Binding ElementName=treeView, Path=SelectedItem}" 
      Text="{Binding XPath=question, UpdateSourceTrigger=PropertyChanged}"/> 
    <Label Content="answer:"/> 
    <TextBox DataContext="{Binding ElementName=treeView, Path=SelectedItem}" 
      Text="{Binding XPath=answer, UpdateSourceTrigger=PropertyChanged}"/> 
</Grid> 
<Grid> 
    <TreeView Name="treeView" ItemsSource="{Binding Source={StaticResource dataxml}, XPath=.}" /> 
</Grid> 
+1

究竟是什麼問題與您的代碼? – 2011-03-01 13:24:19

+0

我不知道如何將屬性名稱綁定到文本框,並且樹視圖和文本框之間的綁定不起作用。 – jwillmer 2011-03-01 13:33:07

回答

1

我有coldandtired :-) 的幫助下解決了這個問題,如果我我可以爾德紀念你的答案有用;-) 下面的工作代碼:

<HierarchicalDataTemplate DataType="cards" ItemsSource="{Binding XPath=card}"> 
    <TextBox Text="somethings" /> 
</HierarchicalDataTemplate> 

<HierarchicalDataTemplate DataType="card"> 
    <StackPanel> 
     <TextBlock Text="{Binding [email protected]}"/> 
     <TextBlock Text="{Binding XPath=question}"/> 
     <TextBlock Text="{Binding XPath=answer}" Margin="0,0,0,15"/> 
    </StackPanel> 
</HierarchicalDataTemplate> 
... 
.. 
.. 
<XmlDataProvider x:Key="dataxml" XPath="root/cards" Source="folder\cards.xml" /> 

     <Label Height="28" Content="Frage:" Margin="0,0,0,177" /> 
     <TextBox DataContext="{Binding ElementName=treeView, Path=SelectedItem}" Text="{Binding XPath=answer, UpdateSourceTrigger=PropertyChanged}" Margin="0,44,0,136" /> 
     <Label Height="28" Content="Antwort:" Margin="0,102,0,94" /> 
     <TextBox DataContext="{Binding ElementName=treeView, Path=SelectedItem}" Text="{Binding XPath=question, UpdateSourceTrigger=PropertyChanged}" Margin="0,136,0,0" /> 
    </Grid> 
    <Grid> 
     <TreeView Name="treeView" ItemsSource="{Binding Source={StaticResource dataxml}, XPath=.}"/> 
    </Grid> 
+0

很好聽!相當惱人的是,我有幾個月前我自己也做了幾乎相同的事情,而且我找不到項目的位置:) – coldandtired 2011-03-01 15:02:55

3

因爲「名」是一個屬性,而不是一個子節點,你需要使用[email protected],使其工作。

有由約什 - 史密斯一個很好的文章here

+0

謝謝,那articel幫助:-) 現在我可以打印出屬性。 但與文本框的綁定仍然是一個問題。它只會選擇卡的最後一個元素:-( – jwillmer 2011-03-01 14:00:43

+0

我認爲問題在於你的TreeView中有TextBoxes,我不太明白,如果你想用TreeView外的TreeView編輯數據,你需要把它們改爲TextBlocks,它可以正常工作 – coldandtired 2011-03-01 14:31:04

+0

用我的HierarchicalDataTemplat一個鼠標點擊選擇問題和答案,這就是爲什麼我的代碼不起作用:-(任何解決方法? – jwillmer 2011-03-01 14:42:33