Как использовать DynamicData с ItemsControl для достижения группировки - PullRequest
0 голосов
/ 22 марта 2019

У нас есть эта концепция в нашем программном обеспечении, называемая «Пользовательские поля».По сути, мы генерируем элементы управления во время выполнения на основе пользовательской конфигурации.В настоящее время я переписываю код, который генерирует элементы управления для использования функций в 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, он не использует элементы пользовательского интерфейса группы.Вот мой 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?

...