我们在称为“自定义字段”的软件中拥有此概念。基本上,我们在运行时根据用户配置生成控件。我目前正在重新编写生成控件以利用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
:
因此,显然我缺少了一些东西。我可以使用DynamicData做到吗?