Tôi có một ListView
mà tôi muốn nhóm các kết quả vào, tuy nhiên các ví dụ mà tôi đang tìm không hoạt động. Tôi có thể nhóm các kết quả của mình bằng cách nào?Làm cách nào để nhóm các mục trong Danh sách WPF
Tôi muốn nhóm trên thuộc tính Status
của một đối tượng tùy chỉnh.
Đây là những gì tôi có:
<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>
Và đây là đoạn code mà tôi có:
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);
}
Vâng, tôi nhận được ba trường hợp của nhóm hiện nay bây giờ, nhưng nhóm của nó để thắng. Bạn trở thành anh hùng cá nhân của tôi ở đây. – Russ
Tôi làm cách nào để sử dụng mã này trong môi trường MVVM? Không có dòng mã gần nơi các mục danh sách được đặt. Chúng được sử dụng thông qua ràng buộc. Tôi không thể tìm thấy một sự kiện mà tôi có thể móc phương thức AddGrouping() vào. Khi DataContext của toàn bộ điều khiển người dùng đã thay đổi, ItemsSource của danh sách vẫn là null. Tôi đoán phải mất lâu hơn một chút. – ygoe
Bạn có thể tạo [CollectionViewSource] (http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource.aspx) trong XAML với nhóm thích hợp và liên kết các điều khiển của bạn với điều đó thay vì bộ sưu tập nguồn trực tiếp. –