Привязка XML-данных к TreeView - PullRequest
0 голосов
/ 01 марта 2011

У меня есть такой xml-код:

<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>

, и я привязал бы его к древовидной структуре, которая показывает мне карточки с их именами и подпунктами.Также я бы привязал это к текстовому полю для редактирования узлов (вопрос, ответ).Я нашел описание для stackoverflow: Двустороннее связывание данных XML с 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>

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

Поскольку имя является атрибутом, а не дочерним узлом, вам нужно использовать XPath=@name, чтобы он работал.

Здесь есть хорошая статья Джоша Смита здесь

1 голос
/ 01 марта 2011

я решил это с помощью coldandtired :-) если бы я мог, я бы отметил ваш ответ как полезный ;-) ниже рабочего кода:

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

<HierarchicalDataTemplate DataType="card">
    <StackPanel>
        <TextBlock Text="{Binding XPath=@name}"/>
        <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>
...