2009-03-12 21 views
22

में आइटम कैसे समूहबद्ध करूं मेरे पास ListView है कि मैं परिणाम समूहबद्ध करना चाहता हूं, हालांकि मुझे जो उदाहरण मिल रहे हैं वे काम नहीं कर रहे हैं। मैं अपने परिणामों को कैसे समूहीकृत कर सकता हूं?मैं WPF ListView

मैं कस्टम ऑब्जेक्ट की Status संपत्ति पर समूह बनाना चाहता हूं।

यह है कि मैं क्या है:

<ListView IsSynchronizedWithCurrentItem="True" 
      ItemsSource="{Binding}" 
      HorizontalContentAlignment="Stretch" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
      Background="Transparent" SelectionChanged="ListView_SelectionChanged" 
      Name="lstShelvedOrders"> 

     <ListView.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.HeaderTemplate> 
        <DataTemplate> 
         <TextBlock FontWeight="Bold" FontSize="15" 
         Text="{Binding Path=Status}"/> 
        </DataTemplate> 
       </GroupStyle.HeaderTemplate> 
      </GroupStyle> 
     </ListView.GroupStyle> 

     <ListView.ItemContainerStyle> 
      <Style TargetType="{x:Type ListViewItem}"> 
       <Setter Property="BorderThickness" Value="1" /> 
       <Setter Property="Width" Value="Auto" /> 
       <Setter Property="FontSize" Value="10.4" />    
      </Style> 
     </ListView.ItemContainerStyle> 

     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Number}" Header="Shelve ID" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Customer}" Header="Customer" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=PurchaseOrderNo}" Header="PO Number" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=SubmittedBy}" Header="Shelved By" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=OrderDate, StringFormat=MMM dd\, yyyy}" Header="Date" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=CustomerTerms.Description}" Header="Order Terms" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=ShippingMethod.Description}" Header="Shipping" /> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=TotalPrice, StringFormat=c}" Header="Order Total" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 

और यह कोड है कि मैं है:

void ShelvedOrderList_DataContextChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e) 
{ 
    AddGrouping(); 
} 

private void AddGrouping() 
{ 
    if (lstShelvedOrders.ItemsSource == null) 
    { 
     return; 
    } 

    CollectionView myView = (CollectionView)CollectionViewSource.GetDefaultView(lstShelvedOrders.ItemsSource); 
    PropertyGroupDescription groupDescription = new PropertyGroupDescription("Status"); 
    myView.GroupDescriptions.Add(groupDescription); 
} 

उत्तर

23

मैं अभी एक बात नोटिस - GroupStyle.HeaderTemplate एक CollectionViewGroup, तो अपने को लागू किया जाएगा DataTemplate शायद इस तरह दिखना चाहिए:

<GroupStyle> 
    <GroupStyle.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock FontSize="15" FontWeight="Bold" Text="{Binding Name}"/> 
     </DataTemplate> 
    </GroupStyle.HeaderTemplate> 
</GroupStyle> 

CollectionViewGroup.Name को उस समूह के लिए Status का मान सौंपा जाएगा।

+0

ठीक है, मैं अब समूह के तीन मामलों हो रही है अब, लेकिन इसका समूह इतना जीत है। आप यहां मेरा निजी नायक बनना चाहते हैं। – Russ

+0

मैं इस कोड का उपयोग एमवीवीएम पर्यावरण में कैसे कर सकता हूं? कोई कोड कोड नहीं है जहां सूची आइटम सेट हैं। वे बाध्यकारी के माध्यम से उपयोग किया जाता है। मुझे कोई ऐसा ईवेंट नहीं मिल रहा है जिसे मैं AddGrouping() विधि को हुक कर सकता हूं। जब पूरे उपयोगकर्ता नियंत्रण का डेटाकॉन्टेक्स्ट बदल गया है, तो सूची का आइटमसोर्स अभी भी शून्य है। मुझे लगता है कि इसमें थोड़ी देर लगती है। – ygoe

+0

आप उचित समूह के साथ XAML में एक [संग्रह दृश्य दृश्य] (http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource.aspx) बना सकते हैं, और इसके बजाय अपने नियंत्रण को बाध्य कर सकते हैं सीधे स्रोत संग्रह। –

3

मुझे लगता है कि यह भी बेहतर हो सकता है एक नया ControlTemplate के साथ एक GroupStyle का उपयोग कर,:

<ListView ItemsSource="{Binding Path=ContactsView}"> 
    <ListView.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.ContainerStyle> 
     <Style TargetType="{x:Type GroupItem}"> 
      <Setter Property="Template" Value="{StaticResource ContactsGroupItemTemplate}" /> 
     </Style> 
     </GroupStyle.ContainerStyle> 
    </GroupStyle> 
    </ListView.GroupStyle> 

...

<ControlTemplate TargetType="{x:Type GroupItem}" x:Key="ContactsGroupItemTemplate"> 
    <Expander IsExpanded="False"> 
    <Expander.Header> 
     <DockPanel> 
     <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100"/> 
      <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}"/> 
      <TextBlock FontWeight="Bold" Text=" Items"/> 
     </DockPanel> 
    </Expander.Header> 
    <Expander.Content> 
     <ItemsPresenter /> 
    </Expander.Content> 
    </Expander> 
</ControlTemplate> 
संबंधित मुद्दे