Tengo un ListView
en el que quiero agrupar los resultados, sin embargo, los ejemplos que encuentro no funcionan. ¿Cómo puedo agrupar mis resultados?Cómo puedo agrupar elementos en un WPF ListView
Quiero agrupar en la propiedad Status
de un objeto personalizado.
Esto es lo que tengo:
<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>
y este es el código que tengo:
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);
}
Bien, estoy recibiendo tres instancias del grupo ahora ahora, pero su agrupación por lo que es una victoria. Tu ser mi héroe personal aquí. – Russ
¿Cómo puedo usar este código en un entorno MVVM? No hay una línea de código cercana donde se establecen los elementos de la lista. Se usan a través de encuadernación. No puedo encontrar un evento en el que pueda enganchar el método AddGrouping(). Cuando el DataContext de todo el control de usuario ha cambiado, ItemsSource de la lista sigue siendo nulo. Supongo que tarda un poco más. – ygoe
Puede crear un [CollectionViewSource] (http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource.aspx) en XAML con la agrupación adecuada y vincular los controles a ese en lugar de la colección fuente directamente –