首页 > 代码库 > D21_03view_分组 groupby
D21_03view_分组 groupby
<Window x:Class="demo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:db="clr-namespace:StoreDatabase;assembly=StoreDatabase" xmlns:local="clr-namespace:demo" Title="FilterCollection" Height="390" Width="628" > <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="3*"></ColumnDefinition> <ColumnDefinition Width="5*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="*"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <Button Margin="7,7,7,0" Padding="2" Click="cmdGetProducts_Click">Get Products</Button> <ListBox Grid.Row="1" Margin="7,3,7,10" Name="lstProducts" DisplayMemberPath="ModelName"> <ListBox.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Foreground="White" Background="LightGreen" Margin="0,5,0,0" Padding="3"></TextBlock> </DataTemplate> </GroupStyle.HeaderTemplate> </GroupStyle> </ListBox.GroupStyle> </ListBox> <Border Grid.Row="2" Margin="7" Padding="7" BorderBrush="SteelBlue" BorderThickness="1" > <Grid> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Label>Price > Than</Label> <TextBox Grid.Column="1" Name="txtMinPrice" TextChanged="txtMinPrice_TextChanged">0</TextBox> <Button Grid.Row="1" Margin="2" Padding="2" Click="cmdFilter_Click">Filter</Button> <Button Grid.Row="1" Grid.Column="1" Margin="2" Padding="2" Click="cmdRemoveFilter_Click">Remove Filter</Button> </Grid> </Border> </Grid> <GridSplitter Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Stretch" Width="5"></GridSplitter> <Border Grid.Column="1" Padding="7" Margin="7" Background="LightSteelBlue"> <Grid DataContext="{Binding ElementName=lstProducts, Path=SelectedItem}" > <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <TextBlock Margin="7">Model Number:</TextBlock> <TextBox Margin="5" Grid.Column="1" Text="{Binding Path=ModelNumber}"></TextBox> <TextBlock Margin="7" Grid.Row="1">Model Name:</TextBlock> <TextBox Margin="5" Grid.Row="1" Grid.Column="1" Text="{Binding Path=ModelName}"></TextBox> <TextBlock Margin="7" Grid.Row="2">Unit Cost:</TextBlock> <TextBox Margin="5" Grid.Row="2" Grid.Column="1" Text="{Binding Path=UnitCost,StringFormat={}{0:C}}"></TextBox> <TextBlock Margin="7,7,7,0" Grid.Row="3">Description:</TextBlock> <TextBox Margin="7" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" Text="{Binding Path=Description}"></TextBox> </Grid> </Border> </Grid></Window>
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using StoreDatabase;using System.ComponentModel;namespace demo{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { private ICollection<Product> products; public MainWindow() { InitializeComponent(); } private void cmdGetProducts_Click(object sender, RoutedEventArgs e) { products = App.StoreDb.GetProducts(); lstProducts.ItemsSource = products; ICollectionView view = CollectionViewSource.GetDefaultView(lstProducts.ItemsSource); //先对CategoryName排序,再对ModelName排序 view.SortDescriptions.Add(new SortDescription("CategoryName",ListSortDirection.Ascending)); view.SortDescriptions.Add(new SortDescription("ModelName", ListSortDirection.Ascending)); //对CategoryName分组 view.GroupDescriptions.Add(new PropertyGroupDescription("CategoryName")); } private void cmdFilter_Click(object sender, RoutedEventArgs e) { decimal minimumPrice; if (Decimal.TryParse(txtMinPrice.Text, out minimumPrice)) { ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(lstProducts.ItemsSource); if (view != null) { filterer = new ProductByPriceFilterer(minimumPrice); view.Filter = new Predicate<object>(filterer.FilterItem); } } } private void cmdRemoveFilter_Click(object sender, RoutedEventArgs e) { ListCollectionView view = CollectionViewSource.GetDefaultView(lstProducts.ItemsSource) as ListCollectionView; if (view != null) { view.Filter = null; } } private ProductByPriceFilterer filterer; private void txtMinPrice_TextChanged(object sender, TextChangedEventArgs e) { ListCollectionView view = CollectionViewSource.GetDefaultView(lstProducts.ItemsSource) as ListCollectionView; if (view != null) { decimal minimumPrice; if (Decimal.TryParse(txtMinPrice.Text, out minimumPrice) && (filterer != null)) { filterer.MinimumPrice = minimumPrice; view.Refresh(); } } } } public class ProductByPriceFilterer { public decimal MinimumPrice { get; set; } public ProductByPriceFilterer(decimal minimumPrice) { MinimumPrice = minimumPrice; } public bool FilterItem(Object item) { Product product = (Product)item; if (product != null) { if (product.UnitCost > MinimumPrice) { return true; } } return false; } }}
D21_03view_分组 groupby
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。