這一天研究了 Silverlight TreeView 的 DataBinding. 這裡作一下簡單的記錄,以便自己回憶。
首先,使用 Silverlight Application 建立一個 SilverlightApplication1 吧。
資料
由於 TreeView 是樹狀結構的顯示元件,要顯示 TreeView 的 DataBinding,當然需要一個樹狀結構的資料。以下是目錄的結構程式。
using System.Collections.Generic;
namespace SilverlightTreeView1
{
public class MyFolder
{
public MyFolder(string name)
{
Name = name;
}
public string Name { get; set; }
public List<MyFolder> SubFolders { get; set; }
}
public class FolderHelper
{
public static List<MyFolder> GetAllFolder()
{
var folders = new List<MyFolder>()
{
new MyFolder("A")
{
SubFolders = new List<MyFolder>(){
new MyFolder("A1")
{
SubFolders = new List<MyFolder>()
{
new MyFolder("A11"),
new MyFolder("A12"),
new MyFolder("A13"),
new MyFolder("A14"),
}
},
new MyFolder("A2"),
new MyFolder("A3")
}
},
new MyFolder("B")
{
SubFolders = new List<MyFolder>(){
new MyFolder("B1"),
new MyFolder("B2"),
new MyFolder("B3"),
new MyFolder("B4"),
}
}
};
return folders;
}
}
}
使用 TreeView 元件
在MainPage.xaml 上拖入一個 TreeView 元件。
Xaml
<UserControl x:Class="SilverlightTreeView1.MainPage"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:SilverlightTreeView1="clr-namespace:SilverlightTreeView1">
<Grid x:Name="LayoutRoot" Background="White">
<sdk:TreeView Name="treeView1">
</sdk:TreeView>
</Grid>
</UserControl>
在 MainPage.xaml 中,建構子程式碼中設定 treeView1.ItemsSource
using System.Windows.Controls;
namespace SilverlightTreeView1
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
treeView1.ItemsSource = FolderHelper.GetAllFolder();
}
}
}
運行程式後,結果如下圖
運作的結果只出現了最上層的兩個目錄,而且並沒有顯示我想要的目錄名稱。
修改1: 顯示目錄名稱
要顯示目錄名稱,其實很簡單,就是要在 xaml 中作一些變化。
<sdk:TreeView Name="treeView1">
<sdk:TreeView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
TreeView.ItemTemplate的內容是內容的樣版,並且使用DataTemplate 作為資料繫結樣版。這裡使用了一個 TextBlock,並且繫結到 MyFolder 物件的 Name 屬性(Property)。
結果如下圖。
修改2:改成樹狀顯示
DataTemplate 只能顯示繫結物件的資料,並無法顯示樹狀結構。為了顯示樹狀結構,我們必須將資料顯示的樣版,改用HierarchicalDataTemplate
<sdk:TreeView Name="treeView1">
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding SubFolders}">
<TextBlock Text="{Binding Name}" />
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
結果如下圖
程式碼下載
沒有留言:
張貼留言