有如下xml代码:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <FileSystem xmlns=""> 3 <Folder Name="Books"> 4 <Folder Name="Programming"> 5 <Folder Name="Windows"> 6 <Folder Name="WPF"/> 7 <Folder Name="MFC"/> 8 <Folder Name="Delphi"/> 9 </Folder> 10 </Folder> 11 <Folder Name="Tools"> 12 <Folder Name="Development"/> 13 <Folder Name="Designment"/> 14 <Folder Name="Players"/> 15 </Folder> 16 <Folder Name="Books1"> 17 <Folder Name="Development"/> 18 <Folder Name="Designment"/> 19 <Folder Name="Players"/> 20 </Folder> 21 <Folder Name="Books2"> 22 <Folder Name="Development"/> 23 <Folder Name="Designment"/> 24 <Folder Name="Players"/> 25 </Folder> 26 <Folder Name="Books3"> 27 <Folder Name="Development"/> 28 <Folder Name="Designment"/> 29 <Folder Name="Players"/> 30 </Folder> 31 </Folder> 32 </FileSystem>
实现加载的方式有:
1.在Xaml中定义一个静态的XmlDataProvider:如下:
1 <UserControl.Resources> 2 3 <XmlDataProvider x:Key="DicData" 4 Source="../DesignData/report.xml" 5 XPath="FileSystem/Folder" /> 6 7 <DataTemplate x:Key="dicItemTemplate"> 8 <Label Content="{Binding XPath=Name}"/> 9 </DataTemplate> 10 </UserControl.Resources>
然后在TreeView ,ListBox等控件中使用:
<ListBox x:Name="DicListBox" Margin="60,12,114,64" DockPanel.Dock="Left" ItemsSource="{Binding Source={StaticResource ReportData}}" ItemTemplate="{StaticResource teamItemTemplate}" IsSynchronizedWithCurrentItem="True" Visibility="Visible" SelectionMode="Single"> </ListBox>
这样子是没有问题能正常显示。
2.使用MVVM 数据绑定,直接加载xml文件
ViewModel中代码:
1 XmlDataProvider xmlDataProvider = new XmlDataProvider(); 2 xmlDataProvider.XPath = "FileSystem/Folder"; 3 XmlDocument xmlDocument = new XmlDocument(); 4 var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DataContext\Setting\FileSystem.xml"); 5 xmlDocument.Load(path); 6 xmlDataProvider.Document = xmlDocument; 7 DicTypeData = xmlDataProvider;
Xaml代码:在Binding的时候需要按照(
DataContext="{Binding DicTypeData}" ItemsSource="{Binding}
)的方式,才能加载出来数据,否则加载不出来。
<TreeView Name="dicTypeTreeView" MinHeight="200" DataContext="{Binding DicTypeData}" ItemsSource="{Binding}"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding XPath=Folder}"> <StackPanel Orientation="Horizontal" Margin="2"> <Image Source="pack://application:,,,/Sv.App;component/Image/Project/lq.png" Width="16" Height="16" SnapsToDevicePixels="True"></Image> <TextBlock Text="{Binding XPath=@Name}" Margin="5,0"></TextBlock> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView>
3.直接在资源中,构建XmlDataProvider数据
<XmlDataProvider x:Key="xdp" XPath="FileSystem/Folder"> <x:XData> <FileSystem xmlns=""> <Folder Name="Books"> <Folder Name="Programming"> <Folder Name="Windows"> <Folder Name="WPF"/> <Folder Name="MFC"/> <Folder Name="Delphi"/> </Folder> </Folder> <Folder Name="Tools"> <Folder Name="Development"/> <Folder Name="Designment"/> <Folder Name="Players"/> </Folder> </Folder> </FileSystem> </x:XData> </XmlDataProvider>