我有一个看起来像这样的DataGrid。
我按性别对数据进行了分组。我的GroupItem样式是
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander x:Name="exp" IsExpanded="True"
Background="White"
Foreground="Black">
<Expander.Header>
<TextBlock Text="{Binding Name}"/>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我希望我的群组标题“男性”和“女性”看起来像“性别:男性”和“性别:女性”,而不是简单的“男性”和“女性”。我如何修改我的GroupItem样式来实现这一点,这样每次我在datagrid中对数据进行分组时,组头可以看起来像GroupHeaderTitle:GroupHeaderValue?或者我是否需要更改除GroupItem样式以外的任何内容才能实现此目的?
答案 0 :(得分:2)
如果您正在使用MVVM,则可以在视图模型中添加表示所需组标题的属性GroupTitle
,否则在Expander.Header
处添加另一个TextBlock。绑定到GroupTitle
属性,请参阅以下代码段:
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander x:Name="exp" IsExpanded="True"
Background="White" Foreground="Black">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=DataContext.GroupTitle}"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 1 :(得分:2)
添加分组时,只需提供转换器:
// Get the default view
ICollectionView view = CollectionViewSource.GetDefaultView(...);
// Do the grouping
view.GroupDescriptions.Clear();
view.GroupDescriptions.Add(new PropertyGroupDescription("Gender", new GenderConverter()));
// The converter
public class GenderConverter : IValueConverter
{
public object Convert(object value,
Type targetType, object parameter, CultureInfo culture)
{
return string.Format("Gender: {0}", value);
}
public object ConvertBack(object value,
Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}