इसलिए मैंने किसी भी XML दस्तावेज़ को बाध्य करने के बारे में एक सवाल पूछा है कि स्कीमा को निम्न तरीके से पेड़ दृश्य के बावजूद कैसे करें: 1. एक्सएमएल प्रदाता और पदानुक्रमित डेटाटाम्प्लेट के माध्यम से WPF TreeView पर XML दस्तावेज़ को बाध्य करें। 2. प्रदर्शन उन निम्न स्वरूप में बच्चे नोड्स है कि सहित एक्सएमएल दस्तावेज़ के सभी नोड्स:
> node1
node1 सामग्री
>ChildNode1
ChildNode1 Contents
>ChildNode1'sChildNode
ChildNode1'sChildNode Contents
> node2
Node2 Contents
समस्या थी कि मेरा TreeView प्रत्येक XmlNode नाम प्रॉपर्टी को TreeItem पर बाध्य कर रहा था। टेक्स्ट XmlNode के मामले में यह #text को TreeItem से बांध देगा जो मैं नहीं चाहता था। http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cbdb2420-1403-436f-aa7f-b1e3b1acb398/
तो चाल चलाता उपयोग करने के लिए का सामना करना पड़ा नोड के प्रकार के आधार मान सेट करने गया था:
तो MSDN मंच पर एक पोस्ट के माध्यम से मैं अपने जवाब मिला है।
चेतावनी यह है कि अन्य प्रकार के नोड्स को अनदेखा कर दिया जाएगा और XML दस्तावेज़ में भिन्न तत्व हो सकते हैं, इसलिए यह हर प्रकार के नोड के लिए काम नहीं कर सकता है।
यहाँ XAML है:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="250" Width="450">
<Window.Resources>
<HierarchicalDataTemplate x:Key="NodeTemplate">
<TextBlock x:Name="text" Text="?" />
<HierarchicalDataTemplate.ItemsSource>
<Binding XPath="child::node()" />
</HierarchicalDataTemplate.ItemsSource>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Text">
<Setter TargetName="text" Property="Text" Value="{Binding Path=Value}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Element">
<Setter TargetName="text" Property="Text" Value="{Binding Path=Name}"></Setter>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
<XmlDataProvider x:Key="xmlDataProvider"></XmlDataProvider>
</Window.Resources>
<Grid >
<TreeView Name="treeView1"
Background="AliceBlue"
ItemsSource="{Binding Source={StaticResource xmlDataProvider}, XPath=*}"
ItemTemplate= "{StaticResource NodeTemplate}"/>
</Grid>
public Window1()
{
InitializeComponent();
XmlDataProvider dataProvider = this.FindResource("xmlDataProvider") as XmlDataProvider;
XmlDocument doc = new XmlDocument();
// Testdocument doc.LoadXml(
@"<root>
<child1>text1<child11>text11</child11>
</child1>
<child2>text2<child21>text21</child21>
<child22>text22</child22>
</child2>
</root>");
dataProvider.Document = doc;
}
स्रोत
2009-06-03 14:22:23