2017-11-09 7 views
-1

목록 상자를 그룹화하려고합니다. 내가 보여줄 수있는 것은 머리말뿐입니다.ListBox WPF 그룹화

'온라인 사용자'목록이 있는데, 다음과 같습니다.

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

당신은

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

이 상세 아래는리스트 박스입니다 목록 상자에서

<CollectionViewSource x:Key="ListBoxItems" Source="{Binding Path=ListOfOnlineUser}"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="Branch" /> 
     </CollectionViewSource.GroupDescriptions> 
</CollectionViewSource> 

을 아래와 마찬가지로 CollectionViewSourceXAML에서 자원을 정의하고 CollectionViewSourceItemsSource 설정을해야한다 그룹화 된 브랜치를 보여주고 각 브랜치는 확장기 안에 있습니다. 축소하고 각 그룹을 확장하십시오.

<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> 
+0

궁금한 점이 있으면 알려주세요. –

+0

내보기 모델에서 컬렉션보기 원본을 만드는 것이 다른 이유는 무엇입니까? – Dylan

+0

또한 여전히 동일한 결과가 나타납니다. 확장자에 머리글이 표시되지만 항목은 없습니다. – Dylan