按 属性 个 itemssource 模型对 ItemsControl 进行分组
Group an ItemsControlby a property of itemsource model
有了这个class:
Public Class PageBetModel
Private _name As String
Public Property Name As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _group As String
Public Property Group As String
Get
Return _group
End Get
Set(ByVal value As String)
_group = value
End Set
End Property
End Class
我想用 ItemsControl
创建样式,绘制 Name
属性,
并按 Group
属性.
分组
<ItemsControl ItemsSource="{Binding Path=Model}" ItemsPanel="{DynamicResource MyPanel}" ItemTemplate="{DynamicResource MyTemplate}"/>
<DataTemplate x:Key="MyTemplate">
<Border MinHeight="100" BorderThickness="0,0,0,2" BorderBrush="#dfe1e0">
<TextBlock x:Name="RadioButtonText" Margin="16,40,16,16" Width="287" Text="{Binding Path=Name}" FontFamily="Arial" FontSize="17" Foreground="#474747" FontWeight="SemiBold" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Left"/>
</Border>
</DataTemplate>
我想展示这个简单的设计,但是用 Expander
按 Group
属性.
对不同的名称进行分组
将 ItemsSource
设置为分组 CollectionViewSource
:
<CollectionViewSource x:Key="cvs" Source="{Binding Path=Model}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Group" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
...并定义一个包含 Expander
:
的 GroupStyle
<ItemsControl ItemsPanel="{DynamicResource MyPanel}"
ItemsSource="{Binding Source={StaticResource cvs}}"
ItemTemplate="{DynamicResource MyTemplate}">
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander IsExpanded="True">
<Expander.Header>
<TextBlock Text="{Binding Name}" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" />
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ItemsControl.GroupStyle>
</ItemsControl>
有了这个class:
Public Class PageBetModel
Private _name As String
Public Property Name As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _group As String
Public Property Group As String
Get
Return _group
End Get
Set(ByVal value As String)
_group = value
End Set
End Property
End Class
我想用 ItemsControl
创建样式,绘制 Name
属性,
并按 Group
属性.
<ItemsControl ItemsSource="{Binding Path=Model}" ItemsPanel="{DynamicResource MyPanel}" ItemTemplate="{DynamicResource MyTemplate}"/>
<DataTemplate x:Key="MyTemplate">
<Border MinHeight="100" BorderThickness="0,0,0,2" BorderBrush="#dfe1e0">
<TextBlock x:Name="RadioButtonText" Margin="16,40,16,16" Width="287" Text="{Binding Path=Name}" FontFamily="Arial" FontSize="17" Foreground="#474747" FontWeight="SemiBold" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Left"/>
</Border>
</DataTemplate>
我想展示这个简单的设计,但是用 Expander
按 Group
属性.
将 ItemsSource
设置为分组 CollectionViewSource
:
<CollectionViewSource x:Key="cvs" Source="{Binding Path=Model}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Group" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
...并定义一个包含 Expander
:
GroupStyle
<ItemsControl ItemsPanel="{DynamicResource MyPanel}"
ItemsSource="{Binding Source={StaticResource cvs}}"
ItemTemplate="{DynamicResource MyTemplate}">
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander IsExpanded="True">
<Expander.Header>
<TextBlock Text="{Binding Name}" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" />
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ItemsControl.GroupStyle>
</ItemsControl>