整理:WPF中XmlDataProvider的用法总结

一、目的:了解XmlDataProvider中绑定数据的方法

二、绑定方式主要有三种:

1、Xaml资源中内置:

        <!--XPath指定一组节点-->
        <XmlDataProvider x:Key="ds1" XPath="XUnits">
            <x:XData>
                <XUnits xmlns="">
                    <FFmpegCommandTextParameter Text="设置纪录时间" ToolTip="hh:mm:ss[.xxx]格式的记录时间也支持"  Command="-t" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="搜索到指定的时间" ToolTip="[-]hh:mm:ss[.xxx]的格式也支持"  Command="-ss" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="设置标题" ToolTip="设置标题"  Command="-title" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="设置作者" ToolTip="设置作者"  Command="-author" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="设置版权" ToolTip="设置版权"  Command="-copyright" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="设置评论" ToolTip="设置评论"  Command="-comment" Parameter="2001"/>
                    <FFmpegCommandCheckParameter Text="激活高质量设置" ToolTip="激活高质量设置"  Command="-hq" IsChecked="false"/>

                    <FFmpegCommandTextParameter Text="设置目标文件类型" ToolTip="设置目标文件类型"  Command="-author" Parameter="2001"/>
                    <FFmpegCommandCheckParameter Text="激活高质量设置" ToolTip="激活高质量设置"  Command="-hq" IsChecked="false"/>
                </XUnits>
            </x:XData>
        </XmlDataProvider>

2、Source属性绑定外部xml文件

  <XmlDataProvider Source="myfile.xml" x:Key="mykey" XPath="/Root"/>

3、绑定代码XmlDocument实例

<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books" Document="{Binding MyDocument}"/>

三、绑定到控件并设置模板

1、绑定树形结构

       <!--年级模版-->
        <HierarchicalDataTemplate DataType="Grade" ItemsSource="{Binding XPath=Class}">
            <TextBlock Text="{Binding XPath=@Name}"></TextBlock>
        </HierarchicalDataTemplate>
        <!--班级模版-->
        <HierarchicalDataTemplate DataType="Class" ItemsSource="{Binding XPath=Group}">
            <RadioButton Content="{Binding XPath=@Name}"></RadioButton>
        </HierarchicalDataTemplate>
        <!--分组模版-->
        <HierarchicalDataTemplate DataType="Group">
            <CheckBox Content="{Binding XPath=@Name}"></CheckBox>
        </HierarchicalDataTemplate>
        <!--数据模版-->
        <XmlDataProvider x:Key="ds" XPath="Data/Grade">
            <x:XData>
                <Data xmlns="">
                    <Grade Name="一年级">
                        <Class Name="甲班">
                            <Group Name="A组"></Group>
                            <Group Name="B组"></Group>
                            <Group Name="C组"></Group>
                        </Class>
                        <Class Name="乙班">
                            <Group Name="A组"></Group>
                            <Group Name="B组"></Group>
                            <Group Name="C组"></Group>
                        </Class>
                    </Grade>
                    <Grade Name="二年级">
                        <Class Name="丙班">
                            <Group Name="A组"></Group>
                            <Group Name="B组"></Group>
                            <Group Name="C组"></Group>
                        </Class>
                        <Class Name="丁班">
                            <Group Name="A组"></Group>
                            <Group Name="B组"></Group>
                            <Group Name="C组"></Group>
                        </Class>
                    </Grade>
                </Data>
            </x:XData>
        </XmlDataProvider>



 <Menu ItemsSource="{Binding Source={StaticResource ds}}"></Menu>
 <TreeView ItemsSource="{Binding Source={StaticResource ds}}" Margin="5"></TreeView>

2、绑定到ListBox、Comboboxl并设置模板

<!--Xml中的元素名可以作为DataType-->
        <DataTemplate DataType="XUnit">
            <Grid>
                <StackPanel Orientation="Horizontal">
                    <Grid>
                        <Rectangle Fill="Red" Width="{Binding XPath=@Price}" Stroke="Yellow"></Rectangle>
                        <TextBlock Text="{Binding XPath=@Year}"/>
                    </Grid>
                    <TextBlock Text="{Binding XPath=@Price}"></TextBlock>
                </StackPanel>
            </Grid>
        </DataTemplate>
        <!--XPath指定一组节点-->
        <XmlDataProvider x:Key="ds1" XPath="XUnits/XUnit">
            <x:XData>
                <XUnits xmlns="">
                    <XUnit Price="100" Year="2001"></XUnit>
                    <XUnit Price="120" Year="2002"></XUnit>
                    <XUnit Price="140" Year="2003"></XUnit>
                    <XUnit Price="180" Year="2004"></XUnit>
                    <XUnit Price="150" Year="2005"></XUnit>
                    <XUnit Price="200" Year="2006"></XUnit>
                </XUnits>
            </x:XData>
        </XmlDataProvider>

四、设置XPath

1、直接设置类型的XPath对应的属性

<DataTemplate DataType="FFmpegCommandTextParameter">
            <Grid Width="{Binding RelativeSource={RelativeSource AncestorType=ListBox},Path=ActualWidth}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition Width="2*"/>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="{Binding XPath=@Text}" ToolTip="{Binding XPath=@ToolTip}"/>
                    <TextBox Text="{Binding XPath=@Parameter}" ToolTip="{Binding XPath=@Command}" Grid.Column="1"/>
                </Grid>
            </Grid>
        </DataTemplate>

如:绑定FFmpegCommandTextParameter节点下面Text属性,注意:@转义字符必须添加

2、在 XmlDataProvider中设置根节点XPath

<XmlDataProvider Source="myfile.xml" x:Key="myfile" XPath="/Root"/>

3、筛选

<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[@ID/=1]}"/>
<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[4]}"/>
<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[@ID&gt;2]}" />
<ListBox.ItemsSource>
      <Binding Source="{StaticResource InventoryData}"
               XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]"/>
    </ListBox.ItemsSource>
  • XPath="Book[1]" 将返回第一个 Book 元素(“XML in Action”)。 请注意 XPath 索引从 1 而不是从 0 开始

  • XPath="Book[@*]" 将返回带有任意特性的所有 Book 元素。

  • XPath="Book[last()-1]" 将返回第二个至最后一个 Book 元素(“Introducing Microsoft .NET”)。

  • XPath="*[position()>3]" 将返回除前 3 个元素之外的所有 Book 元素。

4、匹配所有类型

    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Hidden">
                    <ListBox.ItemsSource>
                        <Binding Source="{StaticResource ds1}"  XPath="*"/>
                    </ListBox.ItemsSource>
                </ListBox>

五、数据同步到XML

XmlDataProvider xml = this.Resources["xmlData"] as XmlDataProvider;
xml.Document.Save("D:/temp.xml");

六、绑定到TextBlock

数据源一:

        <XmlDataProvider x:Key="ss" >
            <x:XData>
                <curriculum_info  xmlns="" class_name = "高等数学" teacher = "tttt" place ="24楼301室" time="31">34353</curriculum_info>
            </x:XData>
        </XmlDataProvider>

 绑定到属性:

<TextBlock  Text="{Binding Source={StaticResource ss}, XPath=curriculum_info/@class_name}"/>

绑定到节点:

<TextBlock  Text="{Binding Source={StaticResource ss}, XPath=curriculum_info}"/>

数据源二:


        <XmlDataProvider x:Key="ss" XPath="curriculum_info">
            <x:XData>
                <curriculum_info  xmlns="" class_name = "高等数学" teacher = "吕良福" place ="24楼301室" time="31">34353</curriculum_info>
            </x:XData>
        </XmlDataProvider>

绑定到属性:

       <TextBlock  Text="{Binding Source={StaticResource ss}, XPath=@class_name}"/>

数据源三:

        <XmlDataProvider x:Key="ss" XPath="List">
            <x:XData>
                <List  xmlns="">
                    <curriculum_info  xmlns="" class_name = "高等数学" teacher = "ttt" place ="24楼301室" time="31">34353</curriculum_info>
                </List>
            </x:XData>
        </XmlDataProvider>

 <TextBlock  Text="{Binding Source={StaticResource ss},XPath=curriculum_info}"/>

注意:xmlns=""必须含有(重要)

猜你喜欢

转载自blog.csdn.net/u010975589/article/details/84327433