我一直关注这个guide(以及其他资源)并让ListBox成功分组我的用户列表。现在问题是双重的;
Include(u => u.Ref_Department)
来获取用户列表来使其变得多余。)数据如下;
用户
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点有帮助。
答案 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));
我在这里使用了不同的属性名称,但你明白了。