1.创建数据库信息:

CreateTable
USE [SlDemo]
GO
/****** 对象: Table [dbo].[TreeSoure] 脚本日期: 05/20/2009 11:26:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TreeSoure](
[ForumID] [int] IDENTITY(1,1) NOT NULL,
[ParendId] [int] NULL,
[ForumName] [nchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_TreeSource] PRIMARY KEY CLUSTERED
(
[ForumID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
2.新建Linque to Sql类DataTreeView.dbml 将[TreeSoure]数据表拖上去即可
3.创建Wcf服务:ServiceTreeView.svc
接口IServiceTreeView内容:

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace TreeViewDemo.Web
{
// 注意: 如果更改此处的接口名称 "IServiceTreeView",也必须更新 Web.config 中对 "IServiceTreeView" 的引用。
[ServiceContract]
public interface IServiceTreeView
{
[OperationContract]
void DoWork();
[OperationContract]
List<TreeSoure> GetTreeData();
}
}
为Wcf实现接口代码

Code
#region
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Activation;
#endregion
namespace TreeViewDemo.Web
{
// 注意: 如果更改此处的类名 "ServiceTreeView",也必须更新 Web.config 中对 "ServiceTreeView" 的引用。
//[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class ServiceTreeView : IServiceTreeView
{
public void DoWork()
{
}
#region IServiceTreeView 成员
public List<TreeSoure> GetTreeData()
{
DataTreeViewDataContext dc = new DataTreeViewDataContext();
var treeData = from treeSoure in dc.TreeSoure
select treeSoure;
return treeData.ToList<TreeSoure>();
}
#endregion
}
}
使用Wcf的时候一定要注意修改Web.config配置文件使其绑定方式为basicHttpBinding ,因为目前silverlight2正式版只支持这种数据绑定
<endpoint address="" binding="basicHttpBinding" contract="TreeViewDemo.Web.IServiceTreeView">
4.Ok数据已经准备好了,现在我们开是处理silverlight的绑定
后台代码:需要引用的命名空间
using Microsoft.Windows.Controls;
using System.Collections.ObjectModel;
using System.Windows.Browser;

Code
public Page()
{
InitializeComponent();
TreeViewDemo.ServiceReferenceTreeView.ServiceTreeViewClient tree = new TreeViewDemo.ServiceReferenceTreeView.ServiceTreeViewClient();
tree.GetTreeDataAsync();
tree.GetTreeDataCompleted += new EventHandler<TreeViewDemo.ServiceReferenceTreeView.GetTreeDataCompletedEventArgs>(tree_GetTreeDataCompleted);
HtmlDocument doc = HtmlPage.Document;
doc.SetProperty("title", "By 张海波");
}
ObservableCollection<TreeSoure> listTreeSoure = new ObservableCollection<TreeSoure>();
void tree_GetTreeDataCompleted(object sender, TreeViewDemo.ServiceReferenceTreeView.GetTreeDataCompletedEventArgs e)
{
if (e.Error == null)
{
listTreeSoure = e.Result;
AddTreeNode(0, null);
}
}
private void AddTreeNode(int parentID, TreeViewItem treeViewItem)
{
List<TreeSoure> result = (from Info in listTreeSoure
where Info.ParendID == parentID
select Info).ToList<TreeSoure>();
if (result.Count > 0)
{
foreach (TreeSoure info in result)
{
TreeViewItem objTreeNode = new TreeViewItem();
objTreeNode.Header = info.ForumName;
objTreeNode.DataContext = info;
if (treeViewItem == null)
{
treeDemo.Items.Add(objTreeNode);
}
else
{
treeViewItem.Items.Add(objTreeNode);
}
//递归加载
AddTreeNode(info.ForumID, objTreeNode);
}
}
}
前台代码:
<controls:TreeView HorizontalAlignment="Left" Margin="43,24,0,42" Width="227" SelectedItemChanged="treeDemo_SelectedItemChanged" x:Name="treeDemo"/>
代码下载