계층적 DataTemplate 와 XML 데이터 소스에 문제를 바인딩
-
21-12-2019 - |
문제
다음과 같은 XML 아래 내가 사용하고 싶 hierarchicaldatatemplate
WPF 트리.
에 따라 값 유형 내가 사용하려는 다른 이미지의 이름이 다음 그것을 얻기 위해 다음에서 이름 값 에서 id 태그입니다.
<key type='Configuration'>
<id field='name' value='Some value'/>
</key>
<key type='Container'>
<id field='name' value='MyName'/>
<key type='Container'>
<id field='name' value='Data12345'/>
<key type='Container'>
<id field='name' value='Data987655'/>
<key type='Circuit'>
<id field='name' value='Data63236723'/>
</key>
</key>
</key>
</key>
내가 노력의 어떤 간단한 예제는 하지만 아무도 그들을 사용하는 방법을 보여 hierarchicaldatatemplate 특성 및 또한 방법으로 텍스트를 얻을 바인딩에서 특성이 있습니다.
면 누구나 할 수 있는 방법을 보여줍 hierarchicaldatatemplate 봐야 하는 이에 대한 XML 을 사용될 트리.
해결책
처음에는 제가 생각하는 당신은 수 없는 그 요구 사항을 충족으로는 XML 스키마.그러나,그것을 시도한 후에는 시험 프로젝트는 것 같다,그것은 모든 잘 작동:
당신이 사용할 필요 XmlDataProvider
액세스 XML file:
<XmlDataProvider Source="/WpfApplication2;component/Xml/TestXMLFile.xml"
XPath="root/key" />
또한 다음 단계를 수행해야 합니다 추가 root
노드를 XML 게 법적인:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<key type='Configuration'>
<id field='name' value='Some value'/>
</key>
<key type='Container'>
<id field='name' value='MyName'/>
<key type='Container'>
<id field='name' value='Data12345'/>
<key type='Container'>
<id field='name' value='Data987655'/>
<key type='Circuit'>
<id field='name' value='Data63236723'/>
</key>
</key>
</key>
</key>
</root>
다음에 추가해야 합 TreeView
:
<TreeView ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemTemplate}" />
그리고 마지막으로,추가 HierarchicalDataTemplate
로 Resources
섹션:
<HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding XPath=key}" DataType="key">
<StackPanel Orientation="Horizontal" Margin="0,2">
<Image>
<Image.Style>
<Style>
<Setter Property="Image.Source" Value="Images/Default.png" />
<Style.Triggers>
<DataTrigger Binding="{Binding XPath=@type}" Value="Container">
<Setter Property="Image.Source" Value="Images/Container.png" />
</DataTrigger>
<DataTrigger Binding="{Binding XPath=@type}" Value="Configuration">
<Setter Property="Image.Source" Value="Images/Configuration.png" />
</DataTrigger>
<DataTrigger Binding="{Binding XPath=@type}" Value="Circuit">
<Setter Property="Image.Source" Value="Images/Circuit.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock Text="{Binding XPath=id/@value}" Margin="5,0" />
</StackPanel>
</HierarchicalDataTemplate>
나는 정말 못을 의미하지 전체 당신을 위한 것,이렇게 나를 떠나 당신은 그것을 조정할 수 있습니다.나는 당신을 믿게 될 것인 여기에서이다.
제휴하지 않습니다 StackOverflow