如何将DynamicData与ItemsControl结合使用以实现分组

时间:2019-03-22 01:23:30

标签: wpf itemscontrol dynamic-data

我们在称为“自定义字段”的软件中拥有此概念。基本上,我们在运行时根据用户配置生成控件。我目前正在重新编写生成控件以利用WPF中的功能的代码。我也在使用DynamicData。

我有一个SourceCache类型的CustomField。每个CustomField都有一个名为CategoryGroup的对象-该对象包含一个Name参数。我想在ItemsControl中将其用作分组,并以粗体显示Name

这是DynamicData链:

_customFields.Connect()
    .Group(x => x.Category.CategoryGroup)
    .Transform(x => new CustomFieldGroup(x))

    .ObserveOn( RxApp.MainThreadScheduler )
    .Bind( out _customFieldGroups )
    .Subscribe()
    .DisposeWith(d);

这是CustomFieldGroup

public class CustomFieldGroup : ObservableCollectionExtended<CustomField>
{
    public string Name { get; set; }

    public CustomFieldGroup(IGroup<CustomField, Guid, CategoryGroup> customFieldsByGroup)
    {
        Name = customFieldsByGroup.Key.Name;

        AddRange( customFieldsByGroup.Cache.Items);
    }
}

到目前为止,太好了。但是,即使我添加了ItemsControl.GroupStyle,它也没有利用组UI元素。这是我的xaml:

<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid HorizontalAlignment="Stretch" Margin="2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="250" />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <Label Content="Item" />
                <TextBlock Grid.Column="1" Text="{Binding}" />
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

    <ItemsControl.GroupStyle>
        <GroupStyle HidesIfEmpty="False">
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <Grid HorizontalAlignment="Stretch" Margin="2">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="250" />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>

                        <Label Content="Group" />
                        <TextBlock FontSize="14" FontWeight="SemiBold" Text="{Binding Name}" />
                    </Grid>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ItemsControl.GroupStyle>
</ItemsControl>

当我查看输出时,仅使用ItemTemplate

Rendered output

因此,显然我缺少了一些东西。我可以使用DynamicData做到吗?

0 个答案:

没有答案