En la vista, ajuste la fuente de datos para un CollectionViewSource que sí se une a la colección de animales en el modelo de vista. El CollectionViewSource puede agruparse, algo como esto:
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Continent" />
</CollectionViewSource.GroupDescriptions>
También tendrá que establecer un estilo de grupo en cualquier artículo en el control que tienes - algo como esto
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock FontWeight="Bold" FontSize="15"
Text="{Binding Path=Name}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ItemsControl.GroupStyle>
Tomado del ejemplo en esta página - http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.groupstyle.aspx
Eso es establecer HeaderTemplate, pero si juegas un poco, deberías poder establecer un estilo de contenedor para cada grupo.
Espero que esto ayude!
Actualización: No estaba muy seguro de esto, así que tuve un golpe rápido en el código. Suponiendo 'botón de activación' es 'botón de radio', esto es lo que he llegado con:
<Grid>
<Grid.Resources>
<CollectionViewSource x:Key="Animals" Source="{Binding}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Continent" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Grid.Resources>
<ItemsControl ItemsSource="{Binding Source={StaticResource Animals}}">
<ItemsControl.GroupStyle>
<x:Static Member="GroupStyle.Default" />
</ItemsControl.GroupStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<RadioButton Content="{Binding Name}" GroupName="{Binding Continent}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
Además, puede mostrar cada grupo como GroupBox mediante la sustitución de la línea <x:Static Member="GroupStyle.Default" />
con:
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<GroupBox Margin="10" Header="{Binding Name}">
<GroupBox.Content>
<ItemsPresenter />
</GroupBox.Content>
</GroupBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
Sin embargo, los botones de opción no serán mutuamente exclusivos por sí solos (supongo que porque están envueltos en controles ListItem, o algo más que los hace hijos únicos de un elemento primario de agrupación).Ese código fue robado/modificado de la entrada GroupStyle en MSDN si desea volver para obtener más información (su ejemplo tenía expansores para mostrar/ocultar grupos): http://msdn.microsoft.com/en-us/library/system.windows.controls.groupstyle.aspx
Avíseme si me he olvidado del punto en absoluto .
¡Muchas gracias! – James
No hay problema, ¡espero que haya sido útil! –
¡Gran respuesta! Gracias – animaonline