我将我的 DataGrid 绑定到从 IMyInterface 派生的不同类型的对象的集合。我需要按对象的真实类型对 DataGrid 进行分组,并根据每种类型的属性在每个组中自动生成列,因为这些类型具有不同的属性。
请帮忙。
我正在添加一些我现有的代码:
XAML:
<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="False"
Background="White"
Foreground="Black">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Path=ItemCount}" Padding="10, 0, 10, 0"/>
<TextBlock Text="Item(s)"/>
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
...
<DataGrid Grid.Row="1" Grid.Column="2" Name="DgPendingMessages" ItemsSource="{Binding }" AutoGenerateColumns="False"
IsReadOnly="True" MaxHeight="400">
<DataGrid.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter />
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding TheMessage}" Header="Pending Message" />
</DataGrid.Columns>
</DataGrid>
代码隐藏:
public class PendingMessage
{
//public IMyInterface TheMessage { get; set; }
public string TheMessage { get; set; }
public string MessageType { get; set; }
}
PendingMessage 是我的模型类,它包含真实 Message 对象的字符串表示形式和 Message 对象的原始类型(用于按它对 DataGrid 进行分组)。
Message 对象可以是从 IMyInterface 派生的任何类型。
var collectionPendingMessages = new ListCollectionView(PendingMessages);
collectionPendingMessages.GroupDescriptions.Add(new PropertyGroupDescription("MessageType"));
DgPendingMessages.ItemsSource = collectionPendingMessages;
而不是真正的 Message 对象的字符串表示,我想要这样的东西:
A型:3件
N 栏 | Z 栏 | X 栏 | T 列
数据 | 数据 | 数据 | 数据
数据 | 数据 | 数据 | 数据
数据 | 数据 | 数据 | 数据
B型:4件
N 栏 | S 栏 | U 列
数据 | 数据 | 数据
数据 | 数据 | 数据
数据 | 数据 | 数据
数据 | 数据 | 数据
C型:3件
N 栏 | Z 栏 | X 栏 | T 列 | U 列
数据 | 数据 | 数据 | 数据 | 数据
数据 | 数据 | 数据 | 数据 | 数据
数据 | 数据 | 数据 | 数据 | 数据