ListBox组绑定不显示标题

时间:2015-01-30 01:56:16

标签: c# wpf xaml listbox

我一直关注这个guide(以及其他资源)并让ListBox成功分组我的用户列表。现在问题是双重的;

  1. 每个组的标题都没有显示它所分组的内容(目前只是一个int)。
  2. 如果可能的话,我希望标题是查找。 (我正在使用实体框架,因此可以通过在查询上使用Include(u => u.Ref_Department)来获取用户列表来使其变得多余。)
  3. 数据如下;

    用户
    ID用户
    id_Department 名称


    idDepartment
    DepartmentName的

    XAML;

    <Grid>
        <Grid.Resources>
            <CollectionViewSource x:Key="lsUsers" Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=_Users}">
                <CollectionViewSource.GroupDescriptions>
                    <PropertyGroupDescription PropertyName="id_Department"/>
                </CollectionViewSource.GroupDescriptions>
            </CollectionViewSource>
        </Grid.Resources>
        <ListBox ItemsSource="{Binding Source={StaticResource lsUsers}}">
            <ListBox.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Expander Header="{Binding id_Department}" IsExpanded="True">
                                            <ItemsPresenter/>
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </ListBox.GroupStyle>
        </ListBox>
    </Grid>
    

    _Users是该类的List<Users>属性,无论如何它显然工作正常,它只是由于某种原因而掉落的标题,我不明白为什么。

    <Expander Header...下的id_Department行上有一个突出显示/警告,上面写着“由于未知的DataContext而无法解析符号'id_Department'”

    更新 如果我将<Expander Header...绑定更改为Name,则会显示id_Department。不确定如何/为什么有效,我不确定它对上面的第1点有帮助。

2 个答案:

答案 0 :(得分:0)

使用GroupStyle时,您只有以下绑定提示:
名称:这是基于
进行分组的组属性的名称 ItemCount:,即每个分组记录的行数


如果你想要另一个基于分组项目的属性,你应该使用Converter但是在使用时:

{Binding Converter="{StaticResource yourConverter}"

考虑Converter的值是CollectionViewGroup,它是分组基项中的对象或行的列表。

答案 1 :(得分:0)

正如@safi所暗示的那样,因为GroupItem是正在设置的样式,所以只能绑定名称 ItemCount 属性。

听起来您正在尝试按部门分组,但希望查看部门名称而不是ID。因此,您应该在Users类和组中添加字符串部门属性,而不是部门ID属性。

您可以通过更改集合视图的SortDescriptions来控制组的顺序。例如,如果您希望按部门名称进行分组,但仍然看到按ID顺序列出的部门而不是按字母顺序排列,则按名称分组,并按ID排序,如下所示:

ICollectionView view = CollectionViewSource.GetDefaultView(_Users);
view.GroupDescriptions.Add(new PropertyGroupDescription("DepartmentName"));
view.SortDescriptions.Add(new SortDescription("DepartmentId", ListSortDirection.Ascending));
view.SortDescriptions.Add(new SortDescription("UserName", ListSortDirection.Ascending));

我在这里使用了不同的属性名称,但你明白了。