using System;namespace Wpf.CartesianChart.Linq
{publicclassCity{publicGuid Id {get;set;}publicstring Name {get;set;}publicdouble Population {get;set;}publicdouble Area {get;set;}publicstring Country {get;set;}}}
后台:
using System;using System.Collections.ObjectModel;using System.Linq;using System.Windows.Controls;using LiveCharts;using LiveCharts.Configurations;using LiveCharts.Helpers;namespace Wpf.CartesianChart.Linq
{publicpartialclassLinqExample:UserControl{publicLinqExample(){InitializeComponent();//lets configure the chart to plot cities
Mapper = Mappers.Xy<City>().X((city, index)=> index).Y(city => city.Population);//lets take the first 15 records by default;var records = DataBase.Cities.OrderByDescending(x => x.Population).Take(15).ToArray();
Results = records.AsChartValues();
Labels =newObservableCollection<string>(records.Select(x => x.Name));
MillionFormatter =value=>(value/1000000).ToString("N")+"M";
DataContext =this;}public ChartValues<City> Results {get;set;}public ObservableCollection<string> Labels {get;set;}public Func<double,string> MillionFormatter {get;set;}publicobject Mapper {get;set;}privatevoidTextBoxBase_OnTextChanged(object sender,TextChangedEventArgs e){var q =(Query.Text ??string.Empty).ToUpper();var records = DataBase.Cities
.Where(x => x.Name.ToUpper().Contains(q)|| x.Country.ToUpper().Contains(q)).OrderByDescending(x => x.Population).Take(15).ToArray();
Results.Clear();
Results.AddRange(records);
Labels.Clear();foreach(var record in records) Labels.Add(record.Name);}}}
前台:
<UserControlx:Class="Wpf.CartesianChart.Linq.LinqExample"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:Wpf.CartesianChart.Linq"xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"mc:Ignorable="d"d:DesignHeight="300"d:DesignWidth="300"d:DataContext="{d:DesignInstance local:LinqExample}"><Grid><Grid.RowDefinitions><RowDefinitionHeight="Auto"></RowDefinition><RowDefinitionHeight="*"></RowDefinition></Grid.RowDefinitions><StackPanelGrid.Row="0"Orientation="Horizontal"><TextBlockVerticalAlignment="Center"Margin="10 0">Search</TextBlock><TextBoxName="Query"VerticalContentAlignment="Center"Width="100"Height="30"TextChanged="TextBoxBase_OnTextChanged"></TextBox></StackPanel><lvc:CartesianChartGrid.Row="1"><lvc:CartesianChart.Series><lvc:ColumnSeriesTitle="2016 Population by City"Values="{Binding Results}"Configuration="{Binding Mapper}"/></lvc:CartesianChart.Series><lvc:CartesianChart.AxisX><lvc:AxisLabelsRotation="-20"Labels="{Binding Labels}"DisableAnimations="True"><lvc:Axis.Separator><lvc:SeparatorStep="1"></lvc:Separator></lvc:Axis.Separator></lvc:Axis></lvc:CartesianChart.AxisX><lvc:CartesianChart.AxisY><lvc:AxisLabelFormatter="{Binding MillionFormatter}"></lvc:Axis></lvc:CartesianChart.AxisY></lvc:CartesianChart></Grid></UserControl>