在视图中,将项目源设置为 CollectionViewSource,该集合本身绑定到 ViewModel 上的 Animals 集合。CollectionViewSource 可以分组,如下所示:
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Continent" />
</CollectionViewSource.GroupDescriptions>
您还需要在您拥有的任何项目控件上设置组样式 - 像这样
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock FontWeight="Bold" FontSize="15"
Text="{Binding Path=Name}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ItemsControl.GroupStyle>
取自此页面上的示例 - http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.groupstyle.aspx
这就是设置 HeaderTemplate,但如果您稍微玩一下,您应该能够为每个组设置容器样式。
希望这可以帮助!
更新:
我对此不太确定,所以我对代码进行了快速的抨击。假设“切换按钮”是“单选按钮”,这就是我想出的:
<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>
此外,您可以将每个组显示为 GroupBox,方法是将行替换为<x:Static Member="GroupStyle.Default" />
:
<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>
但是,单选按钮本身不会相互排斥(我想是因为它们被包装在 ListItem 控件中,或者其他使它们成为分组父级的单个子级的东西)。如果您想返回以获取更多信息,该代码是从 MSDN 中的 GroupStyle 条目中窃取/修改的(他们的示例具有显示/隐藏组的扩展器):http: //msdn.microsoft.com/en-us/library/system .windows.controls.groupstyle.aspx
让我知道我是否完全错过了重点。