zoukankan      html  css  js  c++  java
  • WPF( MVVM)中TreeView 加载xml文档的方式及遇到的问题

    有如下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>
    示例xml

    实现加载的方式有:

    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>
  • 相关阅读:
    哦!Python爬虫的这4种方法优缺点你知道吗?
    当你认为Python程序慢时!几个方法你使用了吗!
    Python数据可视化你了解多少!看一下这些是你了解的吗 ?
    王者英雄你喜欢那个!利用Python网络爬虫教你抓取喜欢的英雄图片!
    使用Python时多少有人走过的坑!你是否也遇到过呢!
    Python的68个内置函数你真正的了解多少!建议合理的运用起来!
    使用Python 进行字串格式化的几种方式!你平时是否使用过呢!
    在找工作吗?今天教你使用Python网络爬虫获取招聘信息!来体验一下
    Azure上A/D系列虚拟机到DS系列迁移(1)
    超大文件上传到Azure Linux虚拟机最佳实践
  • 原文地址:https://www.cnblogs.com/tianwen9579/p/11213058.html
Copyright © 2011-2022 走看看