首页 > 代码库 > D21_04view_使用范围分组(使用值转换器)
D21_04view_使用范围分组(使用值转换器)
<Window x:Class="demo.GroupInRanges" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="GroupInRanges" Height="300" Width="300" xmlns:local="clr-namespace:demo" xmlns:component="clr-namespace:System.ComponentModel;assembly=WindowsBase"> <Window.Resources> <!--分组转换器--> <local:PriceRangeProductGrouper x:Key="Price50Grouper" GroupInterval="100"></local:PriceRangeProductGrouper> <!--CollectionViewSource按价格分组:GroupInterval指定分组间隔--> <CollectionViewSource x:Key="GroupByRangeView"> <CollectionViewSource.SortDescriptions> <component:SortDescription PropertyName="UnitCost" Direction="Ascending"></component:SortDescription> </CollectionViewSource.SortDescriptions> <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="UnitCost" Converter="{StaticResource Price50Grouper}"></PropertyGroupDescription> </CollectionViewSource.GroupDescriptions> </CollectionViewSource> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Button Margin="7,7,7,0" Padding="2" Click="cmdGetProducts_Click">Get Products</Button> <!--Binding Source指定CollectionViewSource--> <ListBox Grid.Row="1" Margin="7,3,7,10" Name="lstProducts" ItemsSource="{Binding Source={StaticResource GroupByRangeView}}"> <!--项模板--> <ListBox.ItemTemplate> <DataTemplate> <TextBlock> <TextBlock Text="{Binding ModelName}"></TextBlock> (<TextBlock Text="{Binding UnitCost,StringFormat={}{0:C}}"></TextBlock>) </TextBlock> </DataTemplate> </ListBox.ItemTemplate> <!--分组样式--> <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> </Grid></Window>
using System;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Shapes;using StoreDatabase;using System.Collections.Generic;using System.Windows.Data;namespace demo{ /// <summary> /// GroupInRanges.xaml 的交互逻辑 /// </summary> public partial class GroupInRanges : Window { public GroupInRanges() { InitializeComponent(); } private ICollection<Product> products; private void cmdGetProducts_Click(object sender, RoutedEventArgs e) { products = App.StoreDb.GetProducts(); //从xaml中查找CollectionViewSource CollectionViewSource viewSource = (CollectionViewSource)this.FindResource("GroupByRangeView"); //viewSource.Source指向数据集合ICollection<Product> products viewSource.Source = products; } }}
PriceRangeProductGrouper:价格转换器
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Data;using System.Globalization;namespace demo{ class PriceRangeProductGrouper : IValueConverter { public int GroupInterval { get; set; } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { decimal price = (decimal)value; if (price < GroupInterval) { return String.Format("Less than {0:C}", GroupInterval); } else { int interval = (int)price / GroupInterval; int lowerLimit = interval * GroupInterval; int uperLimit = (interval + 1) * GroupInterval; return String.Format("{0:C} to {1:C}",lowerLimit,uperLimit); } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotSupportedException("This converter is for grouping only."); } }}
D21_04view_使用范围分组(使用值转换器)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。