2017-11-09 8 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> 

すべて私はリストボックスに表示することができます支店名です。私はグループの下に現れるように名字を得ることができません。説明。

ありがとう。下のリストボックスでは、以下のようにCollectionViewSourceXAMLでリソースを定義し、CollectionViewSourceItemsSourceセットを作るべき

答えて

1

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

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

詳細 は、リストボックスでありますグループ化されたブランチを表示し、各ブランチはエクスパンダ内にあります各グループを折りたたんで展開します。

<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