WPF中的ListBox分组

5
我正在尝试对列表框进行分组,但我只能显示标题。
我有一个“在线用户”列表,看起来像这样。
public class OnlineUser{
  public string Branch {get;set;}
  public string FirstName{get;set;}
  public string LastName{get;set;}
}

然后我使用一些用户填充列表,并将该列表放入ICollectionView“FilterableOnlineUsers”中。

FilterableOnlineUsers = CollectionViewSource.GetDefaultView(OnlineUsers);
FilterableOnlineUsers.GroupDescriptions.Add(new PropertyGroupDescription("Branch"));
FilterableOnlineUsers.SortDescriptions.Add(new SortDescription("Branch", ListSortDirection.Descending));

在我的 Xaml 中:

<ListBox  SelectedItem="{Binding DataContext.SelectedUser" ItemsSource="{Binding DataContext.FilterableOnlineUsers" >
<ListBox.GroupStyle>
    <GroupStyle />
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
    <DataTemplate>
         <StackPanel Orientation="Horizontal">
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0} {1}">
                         <Binding Path="FirstName"></Binding>
                        <Binding Path="LastName"></Binding>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </StackPanel>
    </DataTemplate>
 </ListBox.ItemTemplate>

我在列表框中只能显示分支名称,无法让名字和姓氏在组描述下面显示。

谢谢。

1个回答

11
您应该在XAML资源中定义一个CollectionViewSource,如下所示,并将ItemsSource设置为CollectionViewSource:
<CollectionViewSource x:Key="ListBoxItems" Source="{Binding Path=ListOfOnlineUser}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="Branch" />
        </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

在列表框中

 <ListBox ItemsSource="{Binding Source={StaticResource ListBoxItems}}"/>

详情 下面是一个 ListBox 显示分组的分支,每个分支都在一个可扩展和折叠的 Expander 内。

    <ListBox
        Margin="0,0,5,0"
        ItemsSource="{Binding Source={StaticResource ListBoxItems}}"
        SelectedIndex="-1"
        SelectedItem="{Binding SelectedBranch}">            
        <ListBox.GroupStyle>
            <GroupStyle>
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel Orientation="Vertical" />
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Expander
                                        Padding="0"                                           
                                        BorderThickness="0"
                                        Header="{Binding Name}"
                                        IsExpanded="True">
                                        <ItemsPresenter/>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </ListBox.GroupStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Border BorderThickness="0">
                    <Grid>                            
                        <StackPanel Orientation="Horizontal">                               
                            <TextBlock Text="{Binding FirstName}" />
                            <TextBlock Text="{Binding LastName}" />
                        </StackPanel>                            
                    </Grid>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="Padding" Value="0" />
                <Setter Property="Margin" Value="0" />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>

如果您有任何问题,请告诉我。 - Abin
这有什么不同于我在我的视图模型中创建集合视图源呢? - Dylan
他们在我的代码中确实有这个。我没有展示它只是为了让它更短。 - Dylan
你尝试过制作CollectionViewSource的XAML版本吗? - Abin
让我们在聊天中继续这个讨论:点击此处进入聊天室 - Abin
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接