我是WPF
的新手,我花了最后几个小时尝试添加TreeView
个项目包含多个列。我在互联网上寻找类似的解决方案,我认为我的问题完全相同,正如在这个答案中所解释的那样:How to bind WPF TreeView to a List programmatically?但是,似乎我无法解决它,所以我想问一下寻求帮助。
以下是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>
这是后面的C#
代码:
CarDealer carDealer = GetDealerCars();
foreach(var groupedCar in carDealer.cars.GroupBy(x => x.carBrand).ToList())
{
TreeViewItem item = new TreeViewItem();
item.Header = groupedCar.Key; // This works fine, it shows the brands in the tree view
item.ItemsSource = groupedCar; // This is not shown properly, because I am not sure how to bind the carModel and the carHorsePower properties from the list
treeView1.Items.Add(item);
}
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; }
}
现在,将显示树状视图,其中包含标题,但我不确定如何添加多个列,而不是列,现在它只显示MyTestWpfApplication.Cars
,如上面的链接所示。我想我必须创建文本块并将List<Cars>
中的数据绑定到它们。
答案 0 :(得分:1)
修改你的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 (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);
}
但话又说回来,如果你花更多的时间在MVVM中转换项目,使用模板等等。这样会更好。
答案 1 :(得分:1)
我无法找到怎么做,因为我没有更多的时间,所以我决定选择ListView
和GridView
,这实际上更容易实现
对于其他想要做同样事情的人来说,这是一个很好的教程:http://www.wpf-tutorial.com/listview-control/listview-grouping/