簡介
與WPF TreeView 的 DataBinding (2) 相同的問題,仍然發生在 Silverlight 上。那 Silverlight 可以使用與 WPF 相同的解法嗎?不行,原因出在Silverlight 並設計出 DataTemplateSelector 這樣的概念。
但是,相同的問題該怎麼解決呢?
自己做一個 DataTemplateSelector
沒有?就自己打造一個。
using System.Windows;
using System.Windows.Controls;
namespace SilverlightTreeView1
{
public abstract class DataTemplateSelector : ContentControl
{
public virtual DataTemplate SelectTemplate(
object item, DependencyObject container)
{
return null;
}
protected override void OnContentChanged(
object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
ContentTemplate = SelectTemplate(newContent, this);
}
}
public class MyDataTemplateSelector : DataTemplateSelector
{
public DataTemplate FileTemplate { get; set; }
public HierarchicalDataTemplate FolderTemplate { get; set; }
public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
{
if (item is MyFolder)
return FolderTemplate;
else
return FileTemplate;
}
}
}
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">
<UserControl.Resources>
<SilverlightTreeView1:FolderHelper x:Key="helper" />
<sdk:HierarchicalDataTemplate x:Key="folder" ItemsSource="{Binding Items}">
<StackPanel Orientation="Horizontal">
<Image Source="/SilverlightTreeView1;component/Images/folder.png" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</sdk:HierarchicalDataTemplate>
<sdk:HierarchicalDataTemplate x:Key="file">
<StackPanel Orientation="Horizontal">
<Image Source="/SilverlightTreeView1;component/Images/doc.png" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</sdk:HierarchicalDataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<sdk:TreeView Name="treeView1" ItemsSource="{Binding Source={StaticResource helper}, Path=Items}">
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Items}">
<SilverlightTreeView1:MyDataTemplateSelector Content="{Binding}"
FolderTemplate="{StaticResource folder}" FileTemplate="{StaticResource file}" />
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
</Grid>
</UserControl>
程式運行結果
程式碼下載
沒有留言:
張貼留言