在我的 TreeView 中,我使用两个不同的类进行绑定。例如,我有一个组,可以有 ChildGroup 并且可以有 Items。该类的示例代码:
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace WpfApplication1
{
public class Group
{
public Group(string name)
{
Name = name;
items = new ObservableCollection<Item>();
groups = new ObservableCollection<Group>();
}
public string Name { get;
set;
}
private ObservableCollection<Item> items;
private ObservableCollection<Group> groups;
public ObservableCollection<Item> Items
{
get { return items; }
}
public ObservableCollection<Group> Groups
{
get { return groups; }
}
public IEnumerable<object> AllItems
{
get
{
foreach (var group in groups)
{
yield return …Run Code Online (Sandbox Code Playgroud) 我有两个相同的 HierarchicalDataTemplates。唯一的区别是模板的数据类型。
<HierarchicalDataTemplate DataType="{x:Type Data:OuterType}"
ItemsSource="{Binding Items}">
<StackPanel>...</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type Data:InnerType}"
ItemsSource="{Binding Items}">
<StackPanel>...</StackPanel>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
如何避免在两个数据模板中复制堆栈面板的内容?
我考虑将 StackPanel 变成一个用户控件,但这是唯一可以使用该控件的地方。我宁愿 StackPanel 是某种资源,但我不知道如何使它工作。
我TreeView打算在两个级别上操作.对于他我有两个HierarchicalDataTemplate和两个自定义类型.在ItemsSource链接到ObservableCollection,一切工作正常.我无法想象如何从代码隐藏中选择或扩展节点.在某处提到了一个非常好的想法,即绑定IsExpanded和IsSelected属性到我的自定义类型中的相应属性.唯一的问题是HierarchicalDataTemplate没有TreeViewItem直接实现,所以如何在以下代码中访问这些属性?
<TreeView Name="treeViewNotes" AllowDrop="True" PreviewMouseLeftButtonDown="treeViewNotes_PreviewMouseLeftButtonDown" PreviewMouseMove="treeViewNotes_PreviewMouseMove" Drop="treeViewNotes_Drop" DragEnter="treeViewNotes_DragEnter">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type dataclasses:NoteFolder}" ItemsSource="{Binding Notes}">
<StackPanel Orientation="Horizontal">
<Image Height="16" Source="{Binding TreeViewIcon}" Tag="{Binding Self}"/>
<TextBlock Text="{Binding Title}" Tag="{Binding Self}" Margin="3"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type dataclasses:Note}">
<StackPanel Orientation="Horizontal">
<Image Height="16" Source="{Binding TreeViewIcon}" Tag="{Binding Self}"/>
<TextBlock Text="{Binding Title}" Tag="{Binding Self}" Margin="3"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
我的目标是创建和添加新的时候Note一些NoteFolder,使这个Note选择和Folder扩展.同样需要进一步改进拖放时的UI响应.
我尝试使用 TreeView 显示分层数据,并且我想为不同的子类型设置不同的数据模板。
但问题是,我的风格没有得到应用。
也许这是一个非常简单的错误,但我真的没有找到它。
<TreeView ItemsSource="{Binding List}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Main}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Property1}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Type2}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<TextBlock Text="{Binding Property2}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Type3}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="False"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud) wpf treeview xaml hierarchicaldatatemplate itemcontainerstyle
I'm trying to display a Wpf Treeview with items sorted by a CollectionViewSource.
Currently, everything is working except sorting using this code in my resource dictionary:
<HierarchicalDataTemplate DataType="{x:Type books:Container}" ItemsSource="{Binding Path=Items}">
<nav:ContainerControl />
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
What would be the syntax for changing the HierarchicalDataTemplate to bind to a CollectionViewSource that in turn pulls from the Items property?
I've tried variations of the code posted on Bea Stollnitz's blog with no success. I can't figure out how to set the source of …
data-binding wpf hierarchicaldatatemplate collectionviewsource
我正在尝试TreeView使用数据模板将集合绑定到wpf 控件.集合中的每个项目(人物)还包含两种不同的汽车和书籍集合(汽车,书籍).
这是节省空间所涉及的对象的简化列表.
public class Person
{
public string Name
public List<Book> Books;
public List<Car> Cars;
}
public class Book
{
public string Title
public string Author
}
public class Car
{
public string Manufacturer;
public string Model;
}
Run Code Online (Sandbox Code Playgroud)
这就是我的约束力
public MainWindow()
{
InitializeComponent();
this.treeView1.ItemsSource = this.PersonList();
}
public List<Person> PersonList()
{
List<Person> list = new List<Person>();
Book eco = new Book { Title = "Economics 101", Author = "Adam Smith"};
Book design = new Book { Title …Run Code Online (Sandbox Code Playgroud) 我正在尝试HierarchicalDataTemplate将嵌套数据绑定到WPF 的绝对最简单的用法TreeView.出于某种原因,我的树的孩子看不见:

这是整个XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<TreeView Name="ctTree">
<TreeView.Resources>
<HierarchicalDataTemplate DataType = "{x:Type src:MyClass}"
ItemsSource = "{Binding Path=Children}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Window>
Run Code Online (Sandbox Code Playgroud)
除了使用和命名空间之外,这里有C#的全部内容:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var collection = new ObservableCollection<MyClass>
{
new MyClass { Name …Run Code Online (Sandbox Code Playgroud) 我试图使用HierarchicalDataTemplate显示混合类型的树视图,但到目前为止我的所有尝试都失败了..
我有一个类似树的班级,可以有两种不同类型的孩子.(位置和设备).为了让事情变得可以理解,我想要展示的是:
->Location 1
|
|--->Device 1.1
|--->Device 1.2
|--->Location 1.2
|
|---->Device 1.2.1
|---->Location 1.2.1
.....etc.....
Run Code Online (Sandbox Code Playgroud)
我尝试了很多我找到的解决方案,但都没有效果.在大多数情况下,我只是在树视图中获取类名.我正在尝试使用HierarchicalDataTemplate做什么?如果是,请让我知道如何.
我需要创建一个具有无限父子层次结构的 TreeView。TreeView 需要绑定到名为 的列表ResourceList,并从名为 的列表中提取其子资源Children。所有项目都是同一类型。
这是我到目前为止的 XAML 代码:
<TreeView ItemsSource="{Binding ResourceList}" Grid.Column="0" Grid.Row="2" x:Name="ResourcesTree" SelectedItemChanged="ResourcesTree_OnSelectedItemChanged" Margin="0,4,0,0">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
它有效,但问题是,它只深入三层。我应该改变什么才能使其无限?
如果它很重要,我将使用 C# 和 .NET 作为隐藏代码。
我有一个TreeView建立在XML文件上的文件,每个文件都包含一个文本和一个图像 TreeViewItem.此外,我有一个TextBlock和一个Image,我想绑定到选定的TreeViewItem.
我怎样才能做到这一点?
这是我的XAML:
<Window.Resources>
<HierarchicalDataTemplate DataType="Node" ItemsSource ="{Binding XPath=ChildNode}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding XPath=@Image}"/>
<TextBlock Text="{Binding XPath=@Name}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="ChildNode" ItemsSource ="{Binding XPath=GrandchildNode}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding XPath=@Image}" />
<TextBlock Text="{Binding XPath=@Name}" />
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="GrandchildNode">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding XPath=@Image}" />
<TextBlock Text="{Binding XPath=@Name}" />
</StackPanel>
</DataTemplate>
<XmlDataProvider x:Key="xmlNodeList" Source="XMLFile1.xml" XPath="Root"/></Window.Resources><StackPanel>
<TreeView Name="treeView1" ItemsSource="{Binding Source={StaticResource xmlNodeList}, XPath=Node}" />
<TextBlock />
<Image /></StackPanel>
Run Code Online (Sandbox Code Playgroud)
这是一个XML数据:
<Root>
<Node Name="AAA" …Run Code Online (Sandbox Code Playgroud)