关于使用 数据提供器:XmlDataProvider 的一些问题,以及在WPF中是如何使用的一些介绍,还有踩到的一些坑,希望其他和我碰到一样问题的,可以更快的解决。

  首先,要求是 在WPF 的前台代码 XAML中,将 XML 文件的数据,绑定到 ComboBox下拉框上,之所以使用绑定,是为了以后,如果ComboBox部分的内容需要进行更改,可以不用去修改自己的代码,直接更改 XML文件的内容即可。好了,废话不多说,我们直接进入主题。

1.1 首先我们需要创建一个XML文件,XML文件的内容如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<MenuItems xmlns="">
<Item>
<CNName>测试1</CNName>
<ENName>Test1</ENName>
</Item>
<Item>
<CNName>测试2</CNName>
<ENName>Test2</ENName>
</Item>
<Item>
<CNName>测试3</CNName>
<ENName>Test3</ENName>
</Item>
<Item>
<CNName>测试4</CNName>
<ENName>Test4</ENName>
</Item>
<Item>
<CNName>测试5</CNName>
<ENName>Test5</ENName>
</Item>
</MenuItems>

需要注意的地方是:MenuItems 中有一个属性是 xmlns=“”,这个属性,如果你是想多个ComboBox下拉框进行数据的绑定,需要增加此内容,因为如果没有此项内容,XPath搜索路径会失效;如果绑定的只是单个的ComboBox的话,加不加此项内容都没有影响。

1.2 XML文件创建完毕,接下来就是在 WPF项目 的前台代码 XAML中,添加 资源,并设置相应的x:key的值,如下所示:

<Window.Resources>

  <!--XML数据提供器-->

  <XmlDataProvider x:Key="CboSearchConditionData" Source="/HGSTest;Component/HGSTest.xml" XPath="MenuItems/Item" />
</Window.Resources>

需要注意的是,source是指你创建的 XML 文件的路径,需要保证路径的正确性,否则如果找不到该文件,你其他地方无论如何更改,都是无法进行绑定的,这里说一下,本人因为路径问题,碰到的一些坑。

A:Source="HGSTest.xml",如果你填写的是此路径,那么当你放在项目的次级文件夹的目录下,都会找不到该文件,所以,保守一点的,都是写成以上示例的相对路径,一般路径值的话网上资料很多,可自行百度;

B:XML文件的属性中,【是否复制到输出目录】以及【生成操作】的属性值,都会影响文件的路径。

  【是否复制到输出目录】属性,这里我设置为 【始终复制】 ;

  【生成操作】属性,这里设置为 【Resources】或者是 【内容】都可以,注意,如果设置成【无】,上面 数据提供器的Source给的路径,将会找不到 该XML 文件。

1.3 接下啦,就是在前台代码XAML中,创建一个ComboBox下拉框,将 XML文件的内容绑定到 ComboBox下拉框中,如下所示,ComboBox的内容有以下:  

<ComboBox x:Name="cboMultiCondition" Visibility="Visible" Padding="0,0,0,0" Width="274" Margin="15,0,0,0"
ItemsSource="{Binding Source={StaticResource CboSearchConditionData}}"
IsSynchronizedWithCurrentItem="True"
DisplayMemberPath="CNName"
SelectedValuePath="ENName"
FocusVisualStyle="{x:Null}"
FontSize="30" VerticalContentAlignment="Center"
HorizontalAlignment="Left" HorizontalContentAlignment="Left"></ComboBox>

需要注意的是,DisplayMemberPath代表ComboBox下拉框显示的内容的名称,SelectedValuePath代表的是当你在后台获取数据的时候,使用附加属性获取到的Value值是该【ENName】的值。

1.4 运行的效果如下所示:

  添加一个按钮,输出选中值,添加的XAML如下:

<Button HorizontalAlignment="Left" Name="btnGetValue" Click="btnGetValue_Click">获取选择值</Button>

  添加的后台代码如下:

/// <summary>
/// 获取选中值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGetValue_Click(object sender, RoutedEventArgs e)
{
  MessageBox.Show(this.cboMultiCondition.SelectedValue.ToString());
}

  运行之后程序效果如下:

然后点击按钮,获取选中的comboBox的值,这里我已经将选中项更改为 【测试2】了,得到的结果如下图:

到这里,使用XML的数据提供器,将XML文档的内容绑定到ComboBox上 是如何使用的,以及碰到的一些问题都已经介绍完毕了。

WPF 关于ComboBox在前台绑定XML数据的一些方法,使用XML数据提供器 XmlDataProvider的更多相关文章

  1. 【WPF】ComboBox:根据绑定选取、设置固定集合中的值

    问题场景 我有一个对象,里面有一个属性叫Limit,int类型.虽然int可取的范围很大,我想要在用户界面上限制Limit可取的值,暂且限制为5.10.15.20. 所以ComboBox绑定不是绑定常 ...

  2. WPF中ComboBox控件绑定键值对操作

    WPF中下拉框将键值对作为其数据源的具体操作.本实例以枚举类型以及枚举特性描述字符串生成键值对来进行. namespace ViewC { /// <summary> /// View.x ...

  3. Eclipse关闭XML文件验证的方法,解决xml警告

    XML的编写是否符合规范,可以通过XML Schema或DTD进行验证,但有时候电脑本来就很卡,而且XML的某些错误并未导致程序无法运行的情况下,暂时关闭XML的验证也算不错的选择. 如web.xml ...

  4. ComboBox控件绑定数据源后,添加'请选择'或'全部'

    ComboBox控件绑定数据源后,添加'请选择'或'全部' 当使用ComboBox控件绑定数据源之后,通过Items 属性添加的数据是无效的,此时如果要在所有选项前添加 选项 ,则需要考虑从数据源下手 ...

  5. 5、Android-跨程序共享数据--内容提供器

    Android数据持久化技术:文件存储.SharedPreferences存储.数据库存储 使用这些持久化技术保存的数据只能再当前的应用程序中访问 但是对于不同应用之间的可以实现跨程序数据共享的功能 ...

  6. WPF的ComboBox 数据模板自定义

    WPF的ComboBox 有些时候不能满足用户需求,需要对数据内容和样式进行自定义,下面就简要介绍一下用数据模板(DataTemplate)的方式对ComboBox 内容进行定制: 原型设计如下: 步 ...

  7. (WPF) MVVM: ComboBox Binding, XML 序列化

    基本思路还是在View的Xmal里面绑定ViewModel的属性,虽然在View的后台代码中也可以实现binding,但是还是在Xmal里面相对的代码量要少一些. 此例子要实现的效果就是将一个List ...

  8. C#页面前台绑定数据 <%%><%#%><%=%>

    ASP.net前台绑定用的最多,今天小小总结一下. 1:<%#Eval("")%> 2:<%#Bind("")%> 3:<%=变量 ...

  9. WPF DataGrid 双击行 获得绑定数据

    原文:WPF DataGrid 双击行 获得绑定数据 1)增加事件 2)增加对象获取 1)事件代码 Datagrid 增加事件 MouseDoubleClick="dataGrid_Mous ...

随机推荐

  1. 浅聊TCP的三次握手和四次挥手

    三次握手: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连 ...

  2. NoSQL:一个帝国的崛起

    01关系数据库帝国 现在是公元2009年,关系帝国已经统治了我们30多年,实在是太久了. 1970年,科德提出关系模型,1974年张伯伦和博伊斯制造出了SQL ,帝国迅速建立起了统治. 从北美到欧洲, ...

  3. AQS简单理解入门---1

    这篇文章,我们来聊聊面试时一个比较有杀伤力的问题:聊聊你对AQS的理解? 之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题.当时那位同学内心估计受到了一万点伤害... 因为首先,很多 ...

  4. jvm系列三垃圾回收

    三.垃圾回收 1.如何判断对象可以回收 引用计数法 弊端:循环引用时,两个对象的计数都为1,导致两个对象都无法被释放 可达性分析算法 JVM中的垃圾回收器通过可达性分析来探索所有存活的对象 扫描堆中的 ...

  5. Deep Learning论文翻译(Nature Deep Review)

    原论文出处:https://www.nature.com/articles/nature14539 by Yann LeCun, Yoshua Bengio & Geoffrey Hinton ...

  6. 2019牛客暑期多校训练营(第十场)F.Popping Balloons(线段树)

    题意:现在给你n个点 现在让你横着划三条线间距为r 然后竖着划三条线间距同样为r 现在让你求经过最多的点数 思路:我们首先建一棵关于y区间的线段树 然后枚举x轴 每次更新重叠的点 然后再更新回去 找一 ...

  7. Codeforces Round #673 (Div. 2) C. k-Amazing Numbers(思维)

    题目链接:https://codeforces.com/contest/1417/problem/C 题意 给出一个大小为 $n$ 的数组 $a$,计算当 $k$ 从 $1$ 到 $n$ 取值时在所有 ...

  8. Codeforces Round #646 (Div. 2) E. Tree Shuffling(树上dp)

    题目链接:https://codeforces.com/contest/1363/problem/E 题意 有一棵 $n$ 个结点,根为结点 $1$ 的树,每个结点有一个选取代价 $a_i$,当前 $ ...

  9. Codeforces Round #608 (Div. 2) E. Common Number (二分,构造)

    题意:对于一个数\(x\),有函数\(f(x)\),如果它是偶数,则\(x/=2\),否则\(x-=1\),不断重复这个过程,直到\(x-1\),我们记\(x\)到\(1\)的这个过程为\(path( ...

  10. CodeForces - 449B 最短路(迪杰斯特拉+堆优化)判断最短路路径数

    题意: 给出n个点m条公路k条铁路. 接下来m行 u v w      //u->v 距离w 然后k行 v w         //1->v 距离w 如果修建了铁路并不影响两点的最短距离, ...