Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式填充WPF多列树视图?_C#_Wpf_Xaml_Data Binding_Treeview - Fatal编程技术网

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);
 }