随着应用程序的不断升级,客户的需求不断增多,程序员不得不对自己的应用程序做出相应的修改,如果修改的内容较多,那么就必须找出一种简便方法,下面就为大家介绍一下在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. node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用提高nodejs调试效率

    在开发或调试Node.js应用程序的时候,当你修改js文件后,总是要按下CTRL+C终止程序,然后再重新启动,即使是修改一点小小的参数,也 总是要不断地重复这几个很烦人的操作.这是因为Node.js ...

  2. .net的五层架构

    原文章地址是http://www.360doc.com/content/11/1210/21/19147_171335782.shtml 我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经 ...

  3. How does controller listen to service?

    Polling. The Controller periodically asks the Service for the latest data. IMHO, this option sucks, ...

  4. Android常用功能代码块

    1.设置activity无标题,全屏 // 设置为无标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置为全屏模式 getWindow(). ...

  5. php随笔(一)

    之前的开发一直用的都是Thinkphp框架,对原生的php很不了解,近日打算把以前的项目拿一个出来用原生php再重写一次,顺便再把TP框架拆开好好分析分析. 之前的android开发虽说对面向对象的思 ...

  6. spring security动态管理资源结合自定义登录页面

    如果想将动态管理资源与自定义登录页面一起使用,最简单的办法就是在数据库中将登录页面对应的权限设置为IS_AUTHENTICATED_ANONYMOUSLY. 因此在数据库中添加一条资源信息. INSE ...

  7. NGUI之Slider,最简单的方法做进度条。

    既然标题是最简单的,那么很多东西就不需要我们自己做了,使用的是NGUI的示例,只针对初学者,接下来让我们来做一个最简单游戏设置里的声音控制. 1.导入NGUI: 2.找到NGUI的Menu示例Demo ...

  8. jquery ui dialog去掉右上角的叉号

    var dialog = $("#id").dialog({ resizable:false, height:, width:, zIndex:, modal:true, open ...

  9. 关于百度分享——bdCustomStyle一点bug

    最近碰到一个项目,因为用上百度分享,出现了奇怪的bug. 具体是,当访问JSP页面时,js脚本会执行一次,而java脚本执行了两次. 最后排查发现是百度分享js脚本的问题,把"bdCusto ...

  10. BizTalk开发系列(二十) 类型作用域

    Orchestration中的Type概念跟.NET 里的Class一样,可以在Orchestration开过过程中将多个实例绑定到一种类型.Orchestration 视图里包括的类型有Port T ...