无法显示List作为我的视图与ItemsControl和StackPanel的列之一
本文关键字:ItemsControl StackPanel 视图 我的 List 显示 MyClass | 更新日期: 2023-09-27 17:54:32
我有以下类:
public class Order
{
public string OrderName { get; set; }
public List<Parts> PartsList { get; set; }
}
public class Parts
{
public string PartName { get; set; }
public double PartQuantity { get; set; }
}
在我的代码中我创建了一个Order对象列表
List<Order> myOrders;
我想以某种方式将所有这些显示给用户,例如使用元素的堆栈面板,其中第一个是显示OrderName的TextBox,第二个是显示部件列表的Datagrid ?
老实说,我正在尝试许多不同的事情(我对使用什么类型的控件没有要求),但我永远不能得到PartsList正确显示(要么我什么也得不到,要么我得到"集合"显示给用户。
目标是看到这样的东西:
Order1 Part1 7
Part2 12
Order2 Part1 100
Part2 1
Part3 58
这是我今天的XAML,我真的认为它会工作:
<ItemsControl x:Name="visual"
ItemsSource="{Binding myOrders}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Margin="0,397,37,31" Grid.Row="1" Height="172">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding }"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding OrderName}"
Margin="10" />
<ItemsControl ItemsSource="{Binding PartsList}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding PartName}"
TextAlignment="Center" />
<TextBlock Grid.Column="1"
Text="{Binding PartQuantity}"
TextAlignment="Center" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
有人看到这段代码有什么问题吗?
您有一个额外的不必要的ItemsControl
。含ItemsSource="{Binding}"
的
所以假设myOrders
是一个包含Order
s集合的属性,这应该可以工作:
<ItemsControl x:Name="visual"
ItemsSource="{Binding myOrders}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch" Margin="0,397,37,31"
Grid.Row="1" Height="172">
<ItemsControl.ItemTemplate>
<!-- This defines the DataTemplate to display one Order object-->
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding OrderName}"
Margin="10" />
<ItemsControl ItemsSource="{Binding PartsList}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<ItemsControl.ItemTemplate>
<!-- This defines the DataTemplate to display one Parts object-->
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding PartName}"
TextAlignment="Center" />
<TextBlock Grid.Column="1"
Text="{Binding PartQuantity}"
TextAlignment="Center" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>