我正在尝试使用ListBox的分组功能对我的对象进行排序和分组。
该功能的整个排序部分运行良好,但在尝试绑定GroupStyle中的属性时,它只是不起作用。
我在MSDN上关注了article并完成了与作者完全相同的过程,但它仍然无效。
这是List中的对象,然后绑定到ListBox.ItemsSource
public class SearchResult
{
public string name { get; set; }
public ImageBrush image { get; set; }
public Guid result { get; set; }
public resultType type { get; set; }
}
这是我要分组的type
属性,这是一个Enum,看起来像这样
public enum resultType
{
Artist,
Album,
Track,
Playlist
}
至于我的XAML代码,这里是列表框本身。
<ListBox Width="400" MouseDoubleClick="SearchResultContainer_MouseDoubleClick" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="Transparent" Height="330" SelectionMode="Extended" VerticalAlignment="Stretch" ItemsSource="{Binding Path=srs}" Margin="0,370,0,0" x:Name="SearchResultContainer">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="50" Background="Transparent" Margin="5">
<Border HorizontalAlignment="Left" Height="50" Width="50" Background="{Binding Path=image}"/>
<TextBlock Text="{Binding Path=name}" VerticalAlignment="Center" FontWeight="Light" Margin="60,0" FontSize="18" Foreground="White"></TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock FontWeight="Light" FontSize="15"
Text="{Binding Path=type}"/> <---- Here is where I'm getting the issue
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListBox.GroupStyle>
<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
</ListBox.Resources>
</ListBox>
Binding to the type property just doesn't seem to do anything!
我确保对象在属性中确实有值。
这是最后一个相关代码,它是你添加/删除分组的地方:
CollectionView myView;
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
myView = (CollectionView)CollectionViewSource.GetDefaultView(SearchResultContainer.ItemsSource);
if (myView.CanGroup == true)
{
PropertyGroupDescription groupDescription
= new PropertyGroupDescription("type");
myView.GroupDescriptions.Add(groupDescription);
}
else
return;
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
myView = (CollectionView)CollectionViewSource.GetDefaultView(SearchResultContainer.ItemsSource);
myView.GroupDescriptions.Clear();
}
正如我所说,我跟随作者的一举一动。 任何建议都会受到超级赞赏!
答案 0 :(得分:1)
DataContext
的默认GroupStyle
为CollectionViewGroup,其中包含Name
属性,您可以将其绑定到该属性,这将获取您对项目进行分组的属性值
<TextBlock FontWeight="Light" FontSize="15"
Text="{Binding Path=Name}"/>