一、目的:了解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>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=""必须含有(重要)