ListBox分组 - 使用类型绑定标头不起作用

时间:2014-08-24 09:59:05

标签: c# wpf xaml listbox

我正在尝试使用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();
    }

正如我所说,我跟随作者的一举一动。 任何建议都会受到超级赞赏!

1 个答案:

答案 0 :(得分:1)

DataContext的默认GroupStyleCollectionViewGroup,其中包含Name属性,您可以将其绑定到该属性,这将获取您对项目进行分组的属性值

<TextBlock FontWeight="Light" FontSize="15"
           Text="{Binding Path=Name}"/>