WPF Treeview绑定,我是否显示不同的数据类作为节点子?
问题描述:
我试图显示一个组(文件扩展名和图标)(父),然后在WPF Treeview中找到该组(子级)中的所有文件。我可以让这些组在树形视图中显示,每个都有一个图标和文本,但是我不知道如何将这些文件显示为组的子组。这里是的GroupInfo类,问题是它包含的FileInfo不同的类和所有迄今在WPF树视图我已经阅读教程只使用一个数据类创建树项目:WPF Treeview绑定,我是否显示不同的数据类作为节点子?
public class GroupInfo
{
public GroupInfo()
{
alFiles = new ObservableCollection<FileInfo>();
}
public string strExtension { get; set; }
public ImageSource icon {get; set;}
public string strDescription { get; set; }
public string TypeDescription
{
get
{
string s = strExtension;
s.Replace('.',' ');
s += " - " + strDescription;
return s;
}
set
{
}
}
public ObservableCollection<FileInfo> alFiles;
void LoadIcon()
{
//icon = BitmapFrame.Create();
}
string GetDescription()
{
string strD = "";
return strD;
}
}
我希望能够将alFiles中的所有FileInfo类显示为组节点的子节点。这是我的XAML:
<TreeView Margin="12,12,12,375" Name="trGroups" ItemsSource="{Binding Groups}" >
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:GroupInfo}"
ItemsSource="{Binding Groups}">
<StackPanel Orientation="Horizontal" Margin="2">
<Image Source="{Binding icon}"
Width="16"
Height="16"
SnapsToDevicePixels="True"/>
<TextBlock Text="{Binding TypeDescription}" Margin="5,0"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:FileInfo}"
ItemsSource="{Binding Groups.Files}">
<StackPanel Orientation="Horizontal" Margin="2">
<Image Source="{Binding icon}"
Width="16"
Height="16"
SnapsToDevicePixels="True"/>
<TextBlock Text="{Binding TypeDescription}" Margin="5,0"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
在此先感谢....
答
有几件事情。首先,在你的GroupInfo类中,你应该为你的alFiles
字段定义一个属性。这样可以和Bindings一起使用。
public ObservableCollection<FileInfo> alFiles;
public ObservableCollection<FileInfo> AlFiles { get { return alFiles;} }
接下来,在你的HierarchicalDataTemplate为的GroupInfo的ItemsSource时,应设置为AlFiles
财产。
<HierarchicalDataTemplate DataType="{x:Type local:GroupInfo}"
ItemsSource="{Binding AlFiles}">
最后,除非FileInfo类有孩子们在他们要出现在TreeView,你可能要更改其模板只是一个<DataTemplate>
代替<HierarchicalDataTemplate>
。
<DataTemplate DataType="{x:Type local:FileInfo}">
...
</DataTemplate>
希望这会有所帮助。
Thankyou非常karmicpuppet,很好地工作。我已经在Win32/MFC/Windows Forms中编程了多年,但我决定使用WPF编写我的下一个应用程序,所以我正在学习使用每个控件。让我正确地做到这一点,对于每个子节点,您需要定义数据类型和项目源的,是的? –
2010-09-24 21:46:06
我不确定我了解你的问题。但本质上,对于要在树视图中显示的每种类型的层次数据,必须为其ItemsSource被设置为Children集合的HierarchicalDataTemplate定义它。 – ASanch 2010-09-24 21:55:45
因此,例如,您有一个Customer对象和一个Orders集合。每个Order对象都有一个Items集合。在这种情况下,您需要两个分层数据模板来在树视图中显示它:一个用于Customer类(其中ItemsSource = {Binding Orders}),另一个用于Order类(其中ItemsSource = {Binding Items})。 Item类可以简单地用普通的DataTemplate表示。希望这可以帮助。 – ASanch 2010-09-24 21:56:12