随着应用程序的不断升级,客户的需求不断增多,程序员不得不对自己的应用程序做出相应的修改,如果修改的内容较多,那么就必须找出一种简便方法,下面就为大家介绍一下在SilverLight 中左边导航栏TreeView 如何动态绑定 Xml 文件中的数据

1、准备工作,首先建立一个TreeViewData.xml文件,代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<root>
<node name="系统管理">
<node name="添加用户"/>
<node name="用户管理"/>
<node name="修改密码"/>
<node name="系统参数"/>
</node>
<node name="操作管理">
<node name="违法数据录入"/>
<node name="违法信息套打" />
<node name="业务办理" />
</node>
</root>

2、建立一个TreeViewLoadXmlTest.xaml文件并在其中添加如下代码:

<navigation:Page x:Class="MySilverLight.TreeViewLoadXmlTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:common="clr-namespace:System.Windows;assembly=System.Windows.Controls"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
mc:Ignorable="d"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
d:DesignWidth="640" d:DesignHeight="480"
Title="TreeViewLoadXmlTest Page">
<Grid x:Name="LayoutRoot">
<StackPanel Background="#ffc">
<StackPanel.Resources>
<common:HierarchicalDataTemplate
x:Key="childTemplate"
ItemsSource="{Binding Path=Children}">
<StackPanel>
<TextBlock Text="{Binding Path=Title}"
FontStyle="Italic"/>
</StackPanel>
</common:HierarchicalDataTemplate>
<common:HierarchicalDataTemplate
x:Key="treeTemplate"
ItemsSource="{Binding Path=Children}"
ItemTemplate="{StaticResource childTemplate}">
<TextBlock Text="{Binding Path=Title}"
FontWeight="Bold"/>
</common:HierarchicalDataTemplate>
</StackPanel.Resources>
<!--
ItemsSource - 数据源
ItemTemplate - 指定层级显示数据的模板
-->
<controls:TreeView x:Name="treeView" Margin="5"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource treeTemplate}"
SelectedItemChanged="treeView_SelectedItemChanged">
</controls:TreeView>
</StackPanel>
</Grid>
</navigation:Page>

值得注意的是,在写代码之前,需要在头部加上这样两句话:

xmlns:common="clr-namespace:System.Windows;assembly=System.Windows.Controls"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"

否则,在后面会提示common 和controls出错

3、接下来需要准备一个TreeViewModel.cs类,代码如下:

namespace MySilverLight
{
public class TreeViewModel
{
public string Title { get; set; }
public Uri Address { get; set; }
public List<TreeViewModel> Children { get; set; }
}
}

在此需要引入using System.Collections.Generic;

4、打开后台代码文件TreeViewLoadXmlTest.xaml.cs ,代码如下:

namespace MySilverLight
{
public partial class TreeViewLoadXmlTest : Page
{
public TreeViewLoadXmlTest()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(TreeView_Loaded);
} // 当用户导航到此页面时执行。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
void TreeView_Loaded(object sender, RoutedEventArgs e)
{
XElement root = XElement.Load("TreeViewData.xml"); // 构造带层级关系的数据源(递归方式)
var result = LoadData(root); treeView.DataContext = result;
}
private List<TreeViewModel> LoadData(XElement root)
{
if (root == null)
return null; var items = from n in root.Elements("node")
select new TreeViewModel
{
Title = (string)n.Attribute("name"),
Children = LoadData(n)
}; return items.ToList();
}
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
MessageBox.Show(((TreeViewModel)e.NewValue).Title);
}
}
}

这里同样值得注意的是,需要引用命名空间,System.Xml.Linq;否则XElement会提示找不到;

直到这里,我们的工作基本上算是完成了,效果如下:

本文出自 “程序人生_意念” 博客,请务必保留此出处http://07180402.blog.51cto.com/3679519/987599

Silverlight TreeView 动态绑定Xml 文件的更多相关文章

  1. Silverlight 中 读取XML文件

    一:xml文件 二:后台代码 private void ReadXml() { List<TreeViewItem> nodes = new List<TreeViewItem> ...

  2. jquery递归遍历xml文件,形成ul-li序列,生成树结构(使用了treeview插件)

    treeview插件从这里获得,下载的文件中有demo,看demo文件夹里面的index.html文件就差不多知道如何使用该控件了,在我做的项目里用到的部分代码截图如下(在引用下面的js文件前要先引用 ...

  3. 转载 Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))

    转载:程兴亮文章,地址;http://www.cnblogs.com/chengxingliang/archive/2011/02/07/1949579.html 使用WebClient读取XAP包同 ...

  4. 继承,多态,集合,面向对象,XML文件解析,TreeView动态加载综合练习----->网络电视精灵项目练习、分析

    网络电视精灵 项目运行状态如图: 项目完成后的类: 首先,将程序分为二部分进行: 一:TreeView节点内容的设计及编写: 1.1遍写XML文件:管理(FullChannels.xml),A类电视台 ...

  5. 将Xml文件递归加载到TreeView中

    #region [通过XDocument的方式将Xml文件递归到TreeView控件中] //读取Xml文件(XDocument) //1.加载Xml文件 XDocument  document=XD ...

  6. C#关于xml文件和TreeView之间的转换解析

    主窗体: using System; using System.Collections; using System.Collections.Generic; using System.Componen ...

  7. 使用TreeView加载XML文件

    PS: 由于小弟初学编程,本文只写实现方式,代码写的不是很好请见谅! 1.需要读取的xml文档内容 2. 最终实现效果 3  貌似看起实现起来很复杂 但是想想还是挺简单 思路:  读取XML文档 →获 ...

  8. C#读取xml文件写入到TreeView中

    开发过程中我们会遇到一些读取xml文件的时候,下面是我学习的整理. 用XmlDocument读取加载 XmlDocument doc = new XmlDocument(); doc.Load(&qu ...

  9. Silverlight实用窍门系列:2.Silverlight动态加载外部XML指定地址的WebService---(动态加载外部XML文件中指定的WebService地址)【附带实例源码】

    接上节所讲的,Silverlight可以加载外部的XML文件里面的内容,那么我们可不可以在外部XML里面配置一个WebService地址,并且以此加载这个地址来动态加载WebService呢?这样子就 ...

随机推荐

  1. Codeforces Round #203 (Div. 2)

    非常幸运..第三题,有个地方没想清楚,枚举一下就行了..x to n,这个x没考虑好,跪了...傻傻的lock了代码,通过hack进了DIV1,5-2 . 第一次进入DIV1,记录一下. 不知不觉,已 ...

  2. UESTC 1307 windy数(数位DP)

    题目链接 这其实入门题,不过,我写了好一会,还是一直wa,图样... #include <iostream> #include <cstdio> #include <cs ...

  3. Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_GiftAnimationView"

    1> error 详情: Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_GiftAnimationView&quo ...

  4. 在Linux中安装Tomcat

    带Linux的虚拟机中安装Tomcat 一.从官方网站上下载tomcat软件包.http://tomcat.apache.org/ apache-tomcat-7.0.33.tar.gz 二.下载到本 ...

  5. highcharts 时间少8小时问题

    Highcharts 中默认开启了UTC(世界标准时间),由于中国所在时区为+8,所以经过 Highcharts 的处理后会减去8个小时. 如果不想使用 UTC,有2种方法可供使用: 1.在使用Hig ...

  6. java编程eclipse常用快捷键方式

    Eclipse 常用快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户 ...

  7. 【资源】mp3的外链资源

    做开发有时候会遇到需要mp3外链来进行程序的调试,但是自己搭建服务器比较麻烦,而主流的音乐平台都不提供外链音乐.晚上偶得一外链mp3的网站,标记之: http://9hok.com/

  8. c# 递归

    递归 函数体内调用自身函数,直到符合某一条件时不再继续调用两个需要满足的条件1.有反复调用自身函数的过程2.有函数的出口,有不再继续执行的条件 练习: 1.用递归函数做n的阶乘. 2.一群羊赶到村庄去 ...

  9. js中获取键盘事件【转】

    <script type="text/javascript" language=JavaScript charset="UTF-8"> 2 docu ...

  10. JS验证只允许输入数字

    1.文本框只能输入数字代码(小数点也不能输入)<input onkeyup="this.value=this.value.replace(/\D/g,'')" onafter ...