C# 如何以编程方式填充WPF多列树视图?
我对C# 如何以编程方式填充WPF多列树视图?,c#,wpf,xaml,data-binding,treeview,C#,Wpf,Xaml,Data Binding,Treeview,我对WPF非常陌生,我花了几个小时试图添加一个TreeView,其中的项目包含多个列。我在互联网上寻找过类似的解决方案,我认为我的问题与此完全相同,答案如下:然而,似乎我无法解决它,所以我想寻求帮助 下面是我在XAML中的代码: <TreeView Name="treeView1"> <TreeView.ItemTemplate> <DataTemplate> <Grid>
WPF
非常陌生,我花了几个小时试图添加一个TreeView
,其中的项目包含多个列。我在互联网上寻找过类似的解决方案,我认为我的问题与此完全相同,答案如下:然而,似乎我无法解决它,所以我想寻求帮助
下面是我在XAML
中的代码:
<TreeView Name="treeView1">
<TreeView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding carModel}" />
<TextBlock Text="{Binding carHorsePower}" />
</Grid>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
CarDealer
类如下所示:
public class CarDealer
{
public string dealerAddress { get; set; }
public List<Cars> cars { get; set;}
}
public class Cars
{
public string carBrand { get; set; }
public string carModel { get; set; }
public string carHorsePower { get; set; }
}
公共类卡迪勒
{
公共字符串dealerAddress{get;set;}
公共列表车辆{get;set;}
}
公车
{
公共字符串carBrand{get;set;}
公共字符串carModel{get;set;}
公共字符串carHorsePower{get;set;}
}
现在,显示的是带有标题的树视图,但我不确定如何添加多个列,现在它只显示MyTestWpfApplication.Cars
,如上面的链接所示。我想我必须创建文本块并将列表中的数据绑定到它们
编辑:我想达到的目标是:
public class CarDealer
{
public string dealerAddress { get; set; }
public List<Cars> cars { get; set;}
}
public class Cars
{
public string carBrand { get; set; }
public string carModel { get; set; }
public string carHorsePower { get; set; }
}
修改您的xaml:
<Window.Resources>
<DataTemplate x:Key="subItems">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding carModel}" />
<TextBlock Text="{Binding carHorsePower}" Margin="5, 0, 5, 0" Background="Bisque" Grid.Column="1"/>
</Grid>
</DataTemplate>
</Window.Resources>
<StackPanel>
<TreeView Name="treeView1" Loaded="treeView1_Loaded">
</TreeView>
</StackPanel>
然后修改您的c代码:
CarDealer-CarDealer=GetDealerCars();
foreach(carDealer.cars.GroupBy(x=>x.carBrand.ToList()中的var groupedCar)
{
TreeView项目=新建TreeView项目();
item.Header=groupedCar.Key;
var src=新列表(groupedCar);
item.ItemTemplate=(DataTemplate)FindResource(“子项”);
item.ItemsSource=src;
树视图1.项目。添加(项目);
}
但是,如果您投入更多的时间在MVVM中转换您的项目,使用模板等等。。这会更好。我无法找到如何做,因为我没有更多的时间,我决定使用列表视图和网格视图,这实际上更容易实现
对于其他尝试这样做的人来说,这是一个很好的入门教程:这似乎可行,但现在标题没有显示,有什么想法如何添加它们吗?你能在你试图实现的视觉效果之上添加你的问题吗?您使用的是Treeview,项目现在显示为两列——这就是标题。你的意思是,你需要另一个项目,两列应该是子项目吗?我已经添加了一张我正在尝试实现的图片。是的,这正是我的意思,我需要有另一个标题,两列应该是子项目。答案已更新。嗯,在treeview上下文中使用子项这个术语可能不合适。子项意味着您需要在显示之前对其进行深入研究。在屏幕截图中,不需要进一步深入。
CarDealer carDealer = GetDealerCars();
foreach (var groupedCar in carDealer.cars.GroupBy(x => x.carBrand).ToList())
{
TreeViewItem item = new TreeViewItem();
item.Header = groupedCar.Key;
var src = new List<Cars>(groupedCar);
item.ItemTemplate = (DataTemplate)FindResource("subItems");
item.ItemsSource = src;
treeView1.Items.Add(item);
}