2010-11-01 28 views
2

在我的WPF應用程序中,我有一個CollectionViewSource,它提供了一個私有的ObservableCollection視圖。 CollectionViewSource有一個PropertyGroupDescription,它被用在ListBox中以向用戶的偏好提供數據。CollectionViewSource + PropertyGroupDescription - 組中的項數

在ListBox GroupStyle中使用包含Expander Control的ControlTemplate,結果非常好。但是,除了組名以外,我還想在擴展頭中顯示每個組的項目數。關於綁定路徑的任何想法?

問候, 利亞姆

<Style x:Key="basicGroupStyle" TargetType="{x:Type GroupItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type GroupItem}"> 
       <Expander Header="{Binding Name}" IsExpanded="True"> 
        <ItemsPresenter/> 
       </Expander> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<ListBox ItemsSource="{Binding Source={StaticResource myViewSource}}"> 
    <ListBox.GroupStyle> 
     <GroupStyle ContainerStyle="{StaticResource basicGroupStyle}"/> 
    </ListBox.GroupStyle> 
</ListBox> 

回答

8

,你必須使用屬性ItemCount中

<Window x:Class="WpfApplication11.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
     <XmlDataProvider x:Key="data"> 
      <x:XData> 
       <Animals xmlns=""> 
        <Animal name="Dory" Species="Fish" /> 
        <Animal name="Felix" Species="Cat" /> 
        <Animal name="Fluffy" Species="Dog" /> 
        <Animal name="Jake" Species="Snake" /> 
        <Animal name="Mittens" Species="Cat" /> 
        <Animal name="Murtle" Species="Turtle" /> 
        <Animal name="Nemo" Species="Fish" /> 
        <Animal name="Rex" Species="Dog" /> 
        <Animal name="Rover" Species="Dog" /> 
        <Animal name="Toonces" Species="Cat" /> 
       </Animals> 
      </x:XData> 
     </XmlDataProvider> 
     <CollectionViewSource x:Key="animalsBySpecies" Source="{Binding Source={StaticResource data}, XPath=Animals/Animal}"> 
      <CollectionViewSource.GroupDescriptions> 
       <PropertyGroupDescription PropertyName="@Species" /> 
      </CollectionViewSource.GroupDescriptions> 
     </CollectionViewSource> 
    </Window.Resources> 
    <DockPanel> 
     <ScrollViewer DockPanel.Dock="Bottom" VerticalScrollBarVisibility="Auto"> 
      <ItemsControl ItemsSource="{Binding Source={StaticResource animalsBySpecies}}"> 
       <ItemsControl.GroupStyle> 
        <GroupStyle> 
         <GroupStyle.ContainerStyle> 
          <Style TargetType="{x:Type GroupItem}"> 
           <Setter Property="Template"> 
            <Setter.Value> 
             <ControlTemplate TargetType="{x:Type GroupItem}"> 
              <GroupBox > 
               <GroupBox.Header> 
                <Grid> 
                 <Grid.ColumnDefinitions> 
                  <ColumnDefinition></ColumnDefinition> 
                  <ColumnDefinition></ColumnDefinition> 
                 </Grid.ColumnDefinitions> 
                 <TextBlock Text ="{Binding Name}" ></TextBlock> 
                 <TextBlock Text="(" Grid.Column="1" Margin="15,0,0,0"></TextBlock> 
                 <TextBlock Text="{Binding ItemCount}" Grid.Column="1" Margin="20,0,0,0" 
                    HorizontalAlignment="Right" ></TextBlock> 
                 <TextBlock Text=")" Margin="0,0,-5,0" Grid.Column="1 
                      HorizontalAlignment="Right" ></TextBlock> 
                </Grid> 
               </GroupBox.Header> 
                <ItemsPresenter /> 
              </GroupBox> 
             </ControlTemplate> 
            </Setter.Value> 
           </Setter> 
          </Style> 
         </GroupStyle.ContainerStyle> 
        </GroupStyle> 
       </ItemsControl.GroupStyle> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding [email protected]}" /> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </ScrollViewer> 
    </DockPanel> 
</Window> 
+0

我不知道我是如何錯過在MSDN文檔。非常感謝。 – LiamV 2010-11-01 11:37:56

2

我更新了集團樣式如下。我發現我無法在Expander.Header屬性中使用MultiBinding,屏幕上沒有顯示任何內容,所以我需要包含一箇中間TextBlock。

<Style x:Key="basicGroupStyle" TargetType="{x:Type GroupItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type GroupItem}"> 
        <Expander IsExpanded="True"> 
         <Expander.Header> 
          <TextBlock> 
           <TextBlock.Text> 
            <MultiBinding StringFormat="{}{0} ({1})"> 
             <Binding Path="Name"/> 
             <Binding Path="ItemCount"/> 
            </MultiBinding> 
           </TextBlock.Text> 
          </TextBlock> 
         </Expander.Header> 

         <ItemsPresenter/> 

        </Expander> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
相關問題