Я задавал этот вопрос уже на форумах Microsoft, но до сих пор не получил ответа. Я застрял здесь. У меня есть довольно вложенный фрагмент xml, который я хотел бы связать с помощью иерархических шаблонов данных.
Вот фрагмент XML:
<project>
<products>
<product name="Product2" foldername="string" dbkey="-2405" dbtable="string">
<inifiles>
<inifile name="string" dbkey="-3083" dbtable="string">
<sections>
<section name="string" dbkey="-3025" dbtable="string">
<inientries>
<inikey name="string" value="string" dbkey="9739" dbtable="string" />
</inientries>
</section>
</sections>
</inifile>
</inifiles>
<subproducts>
<subproduct dbkey="1644" dbtable="string" name="Subproduct1">
<inifiles>
<inifile name="string" dbkey="-6544" dbtable="string">
<sections>
<section name="string" dbkey="2436" dbtable="string">
<inientries>
<inikey name="string" value="string" dbkey="-2122" dbtable="string" />
</inientries>
</section>
</sections>
</inifile>
</inifiles>
</subproduct>
<subproduct dbkey="-4746" dbtable="string" name="Subproduct2">
<subinifiles>
<subinifile name="string" dbkey="7519" dbtable="string">
<subsections>
<subsection name="string" dbkey="1680" dbtable="string">
<subinientries>
<subinikey name="string" value="string" dbkey="3682" dbtable="string" />
</subinientries>
</subsection>
</subsections>
</subinifile>
</subinifiles>
</subproduct>
</subproducts>
</product>
`</products>
</project>
Мои иерархические таблицы данных выглядят так:
<HierarchicalDataTemplate
DataType="product"
ItemsSource="{Binding XPath=inifiles/inifile}"
>
<StackPanel Orientation="Horizontal">
<Image Width="16" Height="16"
Source="Images/gnome-applications.png"/>
<TextBlock Text="{Binding XPath=@name}" FontWeight="bold"/>
</StackPanel>
</HierarchicalDataTemplate>
<!-- ######################### Ini-Files #########################################
-->
<HierarchicalDataTemplate
DataType="inifile"
ItemsSource="{Binding XPath=sections/section}"
x:Name="inifile"
>
<StackPanel Orientation="Horizontal">
<Image Width="16" Height="16"
Source="Images/advanced.png"/>
<TextBlock Text="{Binding XPath=@name}">
<TextBlock.ContextMenu>
<ContextMenu>
<Menu BorderThickness="3">
<MenuItem Header="{Binding XPath=@name}">
<MenuItem Header="_Find in Database"/>
<MenuItem Header="_Edit" Tag="{Binding XPath=@value}"/>
</MenuItem>
</Menu>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
<TextBlock Text="{Binding XPath=@key}"/>
</StackPanel>
</HierarchicalDataTemplate>
<!-- ######################### Sections #########################################
-->
<HierarchicalDataTemplate
DataType="section"
ItemsSource="{Binding XPath=inientries/inikey}">
<StackPanel Orientation="Horizontal">
<Image Width="16" Height="16"
Source="Images/indent.png"/>
<TextBlock Text="{Binding XPath=@name}">
<TextBlock.ContextMenu>
<ContextMenu>
<Menu>
<MenuItem HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Height="Auto"
Width="Auto"
Header="{Binding XPath=@name}">
<MenuItem Header="_Find in Database"/>
<MenuItem Header="_Edit"
Tag="{Binding XPath=@value}"/>
</MenuItem>
</Menu>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
<TextBlock Text="{Binding XPath=@key}"/>
</StackPanel>
</HierarchicalDataTemplate>
<!-- ######################### Ini-Keys #########################################
-->
<HierarchicalDataTemplate
DataType="inikey">
<StackPanel Orientation="Horizontal">
<Image Width="16" Height="16"
Source="Images/keyring.png"/>
<TextBlock Text="{Binding XPath=@name}">
<TextBlock.ContextMenu>
<ContextMenu>
<Menu>
<MenuItem HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Height="Auto"
Width="Auto"
Header="{Binding XPath=@name}">
<MenuItem Header="_Find in Database"/>
<MenuItem Header="_Edit"
Tag="{Binding XPath=@value}"
/>
</MenuItem>
</Menu>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
<TextBlock Text="{Binding XPath=@value}"/>
</StackPanel>
</HierarchicalDataTemplate>
Я могу связать все теги, кроме тега <subproducts>
. Я мог прочитать структуру через XmlDocument, но я бы потерял все преимущества шаблонов.