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.");
        }
    }
}
时间: 2024-10-01 01:31:49

D21_04view_使用范围分组(使用值转换器)的相关文章

uwp开发:数据绑定——值转换器 的简单使用

今天,我在做最近正在开发的“简影”uwp应用时遇到一个问题,其中有个栏目,叫做“画报”,是分组显示一组一组的 图片,每组图片在界面上只显示9个,点击去以后显示该组的所有图片. 其中,Model 如下: 画报类,其中有个属性是图片类集合. 在View界面,通过ListView嵌套绑定GridView 如下: 但是,要求是每项只能显示9张图片,而集合内的数据不止9张,如果这样直接绑定到GridView上,那么会将ImagList里面的所以图片都显示出来,那么,要想每项都显示9张.这时候,该怎么办呢?

wpf值转换器IValueConverter例子

转载:http://blog.163.com/[email protected]/blog/static/37140526201085113430862/ 值转换器可以把一种类型转换成另一种类型.例如,绑定到一个代表图片地址的字符串,希望显示的是图片,将数据存储为浮点类型,但通过货币的形式呈现:还有将日期存储成DateTime格式,在界面上显示时使用Calender控件等.下面写一个简单的例子,获得系统当前的时间,显示”now is 2010-xx-xx xx:xx;xx”.xaml的代码: 1

WPF Binding值转换器ValueConverter使用简介(一)

WPF.Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为yyyyMMdd的日期,再如有一个值是根据另外多组值的不同而异的,此时我们就需要定制自己的Converter. .Net Framework提供了两种Converter接口,单值转换的接口IValueConverter和多值转换的接口IMultiValueConverter,它们都属于System.Windows.Data命名空间,在程序集Presentati

WPF值转换器

一.摘要 本文通过实例演示WPF值转换器的应用,并在演示过程中,对WPF值转换器的相关知识点进行解释说明. 二.实例演示 1 新建WPF应用程序ConverterExp,程序结构如下图所示. 图1 程序结构图 程序的主画面如下图所示. 图2 程序主画面 程序完成功能: 通过改变画面中ComboBox控件的选中项来改变TextBlock控件的Background值. ComboBox控件的下拉列表中可供选择的项有"red""green"和"blue"

WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter

注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于横向流量时指示灯应为绿色,当纵向流量小于横向流量时指示灯应为红色,否则指示灯为黄色. 1.定制ColorConverter类,此时Convert中参数是object[] values,values[0]对应MultiBinding中的第一个Binding值,这里是纵向流量值,依此类推,可以在Mult

【值转换器】 WPF中Image数据绑定Icon对象

原文:[值转换器] WPF中Image数据绑定Icon对象 ? ? ? ?这是原来的代码: ? ? ? ?<Image Source="{Binding MenuIcon}" ?/> ? ? ? ?这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico". ? ? ? ?我遇到的问题是,同事已经封装好的类中的MenuIcon是Icon对象,并不是一个相对或者绝对的路径,另外WPF里也没有可以直接表示Icon对象的控

DB2日期分组计算数据值

最近参与的项目进行了一次优化技改,对其中SQL参数化公用方法进行了改造.又因项目组人员调整,接受其他模块.针对这次改造,自己负责的模块都要测试到底. 然后再测试过程发现,一个针对日期分组计算的SQL报错,报SQL语句超长的异常. 举个栗子,功能要求如下: 表table_test中 ID           AMOUNT         CREATE_DATE 1            100                   2014-01-01 2            100       

记一则罕见的hive字段值异常引起map阶段的OOM

前段时间遇到了一个很诡异的发生的Map阶段的OOM异常,花了些时间才找到原因,这个简要记录一下. 先看log. 节点一的TaskTracker的log: 节点二的TaskTracker的log: 节点三的TaskTracker的log: 其他节点的TaskTracker中的log都和slave4的一样的: 故障分析: OOM是一个比较常见的故障,其中发生在reduce阶段最为常见,最有可能是数据通过map函数后,shuffle到reduce端处理时由于分布问题导致某个分组的值太多出现OOM.另外

分组统计(平均值计算)

1.以样地号分组求值,cast() as....指转换类型   ,decimal(,)指保留小数点 select 样地号,cast(SUM(平均树高*断面积*样地活株数)/SUM(断面积*样地活株数) as decimal(4,2)) as '平均树高' from Sheet2$ group by 样地号2.case...when...then...end的用法 select 样地号,优势树种,组成= case when 组成 >=1 then cast(FLOOR(组成) AS nvarcha