首页 > 编程语言 >WPF Livecharts C# Column name change

WPF Livecharts C# Column name change

时间:2024-08-29 15:28:59浏览次数:11  
标签:name C# System rnd Column using new Next 1000

//xaml
<Window x:Class="WpfApp299.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
        xmlns:local="clr-namespace:WpfApp299"
        mc:Ignorable="d" WindowState="Maximized"
        Title="MainWindow">
    <Grid x:Name="gd">
        <!--<Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ListBox Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"
                 ItemsSource="{Binding FtNames,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">            
        </ListBox>
        <Button HorizontalAlignment="Right" VerticalAlignment="Top" Width="200" Height="50" Click="Button_Click" 
                Panel.ZIndex="2" Content="Refresh" Grid.Row="0" Grid.Column="1"/>
        --><!--<Thumb x:Name="tb" Panel.ZIndex="10" Width="10" Grid.Row="1" Grid.Column="1"
               DragStarted="Thumb_DragStarted"
               DragDelta="Thumb_DragDelta"
               DragCompleted="Thumb_DragCompleted"
               Height="{Binding Path=ActualHeight,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}">
            <Thumb.Template>
                <ControlTemplate>
                    <Rectangle>
                        <Rectangle.Fill>Red</Rectangle.Fill>
                    </Rectangle>
                </ControlTemplate>
            </Thumb.Template>
        </Thumb>--><!--
        
        <lvc:CartesianChart x:Name="chart" Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" Series="{Binding BooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                            LegendLocation="Right"
                            MouseDown="CartesianChart_MouseDown" Panel.ZIndex="1">
            <lvc:CartesianChart.AxisX>
                <lvc:Axis  Labels="{Binding Labels,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
            </lvc:CartesianChart.AxisX>
            <lvc:CartesianChart.AxisY>
                <lvc:Axis Title="Score" LabelFormatter="{Binding Formatter}"/>
            </lvc:CartesianChart.AxisY>
        </lvc:CartesianChart>-->
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ListBox Grid.Column="0" ItemsSource="{Binding FtNames,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                 SelectionChanged="ListBox_SelectionChanged"/>
        <Button HorizontalAlignment="Right" VerticalAlignment="Top" Width="200" Height="50" Click="Button_Click" 
         Panel.ZIndex="2" Content="Refresh" Grid.Row="0" Grid.Column="1" />
        <lvc:CartesianChart x:Name="chart" Grid.Column="1" Series="{Binding BooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                     LegendLocation="Right"
                     MouseDown="CartesianChart_MouseDown" Panel.ZIndex="1">
            <lvc:CartesianChart.AxisX>
                <lvc:Axis  Labels="{Binding Labels,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
            </lvc:CartesianChart.AxisX>
            <lvc:CartesianChart.AxisY>
                <lvc:Axis Title="Score" LabelFormatter="{Binding Formatter}"/>
            </lvc:CartesianChart.AxisY>
        </lvc:CartesianChart>
    </Grid>
</Window>




//cs
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
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 LiveCharts;
using LiveCharts.Wpf;
using Newtonsoft.Json;

namespace WpfApp299
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {

        private int idx = 0;
        public MainWindow()
        {
            InitializeComponent();
            rnd = new Random();
            this.DataContext = this;
            InitData();
        }


        private void InitData()
        {
            FtNames = new ObservableCollection<string>();
            var bkPis = typeof(Book).GetProperties().Where(x => x.PropertyType == typeof(double)).ToList();
            if (bkPis != null && bkPis.Any())
            {
                bkPis.ForEach(x =>
                {
                    ftNames.Add(x.Name);
                });
            }

            BooksCollection = new SeriesCollection();
            //BooksCollection.Add(new ColumnSeries
            //{
            //    Title = "2015",
            //    Values = new ChartValues<double> { rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000) }
            //});

            //BooksCollection.Add(new ColumnSeries
            //{
            //    Title = "2016",
            //    Values = new ChartValues<double> { rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000) }
            //});

            //BooksCollection.Add(new ColumnSeries
            //{
            //    Title = "2017",
            //    Values = new ChartValues<double> { rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000) }
            //});

            //BooksCollection.Add(new ColumnSeries
            //{
            //    Title = "2018",
            //    Values = new ChartValues<double> { rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000) }
            //});

            //BooksCollection.Add(new ColumnSeries
            //{
            //    Title = "2019",
            //    Values = new ChartValues<double> { rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000), rnd.Next(1, 1000) }
            //});

            //Labels = new List<string>();
            //for (int i = 0; i < 5; i++)
            //{
            //    Labels.Add($"SalesMan_{rnd.Next(1, 100)}");
            //}


            BooksList = new List<Book>();

            for (int i = 0; i < 10; i++)
            {
                BooksList.Add(new Book()
                {
                    Id = i,
                    Name = $"Name_{i + 1}",
                    MathScore = rnd.Next(1, 100),
                    CSScore = rnd.Next(1, 100),
                    PhysicsScore = rnd.Next(1, 100),
                    EngScore = rnd.Next(1, 100),
                    Class = rnd.Next(1, 200),
                    Grade = rnd.Next(1, 200),
                });
            }
            BooksCollection = new SeriesCollection();
            BooksCollection.Add(new ColumnSeries()
            {
                Title = "CSScore",
                Values = new ChartValues<double>(BooksList.Select(x => x.CSScore).ToList())
            });

            BooksCollection.Add(new ColumnSeries()
            {
                Title = "Class",
                Values = new ChartValues<double>(BooksList.Select(x => (double)x.Class).ToList())
            });

            BooksCollection.Add(new ColumnSeries()
            {
                Title = "Grade",
                Values = new ChartValues<double>(BooksList.Select(x => (double)x.Grade).ToList())
            });

            Labels = new List<string>();
            for (int i = 0; i < 10; i++)
            {
                Labels.Add($"{BooksList[i].Name}");
            }
        }

        private Random rnd { get; set; }

        private SeriesCollection booksCollection;
        public SeriesCollection BooksCollection
        {
            get
            {
                return booksCollection;
            }
            set
            {
                booksCollection = value;
                OnPropertyChanged(nameof(BooksCollection));
            }
        }

        private List<Book> booksList;
        public List<Book> BooksList
        {
            get
            {
                return booksList;
            }
            set
            {
                if (value != booksList)
                {
                    booksList = value;
                    OnPropertyChanged(nameof(BooksList));
                }
            }
        }

        public int MyProperty { get; set; }

        private List<string> labels;
        public List<string> Labels
        {
            get
            {
                return labels;
            }
            set
            {
                if (value != labels)
                {
                    labels = value;
                    OnPropertyChanged(nameof(Labels));
                }
            }
        }

        private ObservableCollection<string> ftNames;
        public ObservableCollection<string> FtNames
        {
            get
            {
                return ftNames;
            }
            set
            {
                if (value != ftNames)
                {
                    ftNames = value;
                    OnPropertyChanged(nameof(FtNames));
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propName)
        {
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler?.Invoke(this, new PropertyChangedEventArgs(propName));
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var thumbsList = gd.Children.OfType<Thumb>()?.ToList();
            if (thumbsList != null && thumbsList.Any())
            {
                thumbsList.ForEach(x =>
                {
                    gd.Children.Remove(x);
                });
            }
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                InitData();
            }));
            //Task.Run(() =>
            //{
            //    InitData();
            //});
        }

        private void Thumb_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
        {

        }

        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {

        }

        //private void Thumb_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
        //{
        //    var margin = tb.Margin.Left;
        //    var xDelta = e.HorizontalChange;
        //    tb.Margin = new Thickness(tb.Margin.Left + xDelta, 0, 0, 0);
        //}

        int zIndex = 20;
        private void CartesianChart_MouseDown(object sender, MouseButtonEventArgs e)
        {
            var pt = e.GetPosition(this);
            Thumb newTb = new Thumb();
            newTb.Width = 10;
            newTb.Height = this.ActualHeight;
            newTb.Background = new SolidColorBrush(Colors.Red);
            newTb.BorderBrush = new SolidColorBrush(Colors.Red);
            newTb.Margin = new Thickness(rnd.Next(500, 1000), 0, 0, 0);
            chart.Width = this.ActualWidth;
            Grid.SetZIndex(newTb, 10);
            gd.Children.Add(newTb);
        }

        private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if(e.AddedItems!=null && e.AddedItems.Count>0)
            {
                var selectedName = e?.AddedItems[0]?.ToString();
                if (!string.IsNullOrEmpty(selectedName))
                {
                    BooksCollection = new SeriesCollection();
                    var pis = typeof(Book).GetProperties().Where(x => x.PropertyType == typeof(double)).ToList();
                    var selectedPi = pis.Where(x => x.Name == selectedName).FirstOrDefault();
                    List<double> scoresList = new List<double>();
                    foreach (var bk in BooksList)
                    {
                        var objValue = selectedPi.GetValue(bk);
                        double d = 0;
                        if (double.TryParse(objValue.ToString(), out d))
                        {
                            scoresList.Add(d);
                        }
                    }
                    BooksCollection.Add(new ColumnSeries()
                    {
                        Title = selectedName,
                        Values = new ChartValues<double>(scoresList)
                    });
                    BooksCollection.Add(new ColumnSeries()
                    {
                        Title = "Class",
                        Values = new ChartValues<double>(BooksList.Select(x => (double)x.Class).ToList())
                    });
                    BooksCollection.Add(new ColumnSeries()
                    {
                        Title = "Grade",
                        Values = new ChartValues<double>(BooksList.Select(x => (double)x.Grade).ToList())
                    });
                }
            } 
        }
    }

    public class Book
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public double MathScore { get; set; }
        public double CSScore { get; set; }
        public double PhysicsScore { get; set; }
        public double EngScore { get; set; }
        public int Class { get; set; }
        public int Grade { get; set; }
    }
}

 

 

 

 

标签:name,C#,System,rnd,Column,using,new,Next,1000
From: https://www.cnblogs.com/Fred1987/p/18386757

相关文章

  • Spark MLlib模型训练—回归算法 Decision tree regression
    SparkMLlib模型训练—回归算法Decisiontreeregression在机器学习中,决策树是一种常用且直观的模型,广泛应用于分类和回归任务。决策树回归(DecisionTreeRegression)通过将数据集分割成多个区域,构建一棵树形结构,以预测目标变量的连续值。本文将详细探讨Spark中的决......
  • GEE 更新和优化:利用GEE在线处理1985-2024年NDVI、EVI、SAVI、NDMI等指数归一化教程!(Lan
    简介本次的归一化教程,优化了数据去云,预处理等过程,同事将landsat5/7/8集合分别进行了数据整合,也就是原始波段的处理,从而我们可以调用1985-至今任何一个时期的影像进行归一化处理。具体的原文介绍请看原始的博客原始博客利用GEE(GoogleEarthEngine)在线处理NDVI、EVI、SAVI......
  • 训练yolov5时出现报错:AttributeError: ‘FreeTypeFont‘ object has no attribute ‘g
    报错:Traceback(mostrecentcalllast):File"D:\anaconda3_xz\envs\luopytorch\lib\threading.py",line932,in_bootstrap_innerself.run()File"D:\anaconda3_xz\envs\luopytorch\lib\threading.py",line870,inrunself._target(*s......
  • ORACLE中行锁问题排查手段
    概念描述行锁,对应等待事件’enq:TX-rowlockcontention’。是应用环境中经常碰到的故障现象。当发生行锁时,往往意味着大量业务会话被阻塞。造成业务功能无法进行。因此需要尽快排查出问题源头及原因。采取有效的处理措施。关于行锁等待事件enq:TX-rowlockcontention,通......
  • debain系统安装docker
    1.更新软件包列表首先,更新系统的软件包列表:sudoapt-getupdate2.安装依赖包安装Docker所需的依赖包:sudoapt-getinstall\apt-transport-https\ca-certificates\curl\gnupg\lsb-release3.添加Docker的GPG密钥下载并添加Docker......
  • OpenCV(cv::normalize())
    目录1.函数原型:2.使用场景:3.示例:cv::normalize()是OpenCV中用于将数据值缩放到指定范围或对数据进行归一化处理。1.函数原型:voidcv::normalize(InputArraysrc,OutputArraydst,doublealpha=1,doublebeta=0,intnorm_type=NORM_L2,intdtype=-1,I......
  • SpringMVC扩展点RequestBodyAdvice和ResponseBodyAdvice如何使用及实现原理
    1.概述  SpringMVC是当今web项目系统开发后端技术框架的不二之选,也是Spring全家桶中非常重要的一个成员,它的设计思想和实现套路都是很值得我们学习的,所以今天我们就再来看看SpringMVC框架中预留的两个钩子也就是扩展点:RequestBodyAdvice和ResponseBodyAdvice。之前在总结详解......
  • VSCode常用插件
    VsCode插件市场地址https://marketplace.visualstudio.comVsCode拓展插件安装快捷键:Ctrl+Shift+X进入拓展面板,到应用商店文本框中搜索拓展。 适用于VSCode的中文(简体)语言包拓展名称:Chinese(Simplified)LanguagePackforVisualStudioCode插件市场地址:https://mar......
  • QUIC在京东直播的应用与实践
    一.前言与背景国内的互联网直播技术从2005年前后兴起,彼时最具代表性的直播产品是由PPLive创始人姚欣在华中科技大学就读期间发起的校园直播项目PPLive。当时的直播技术用的还是基于windows系统自带的mediaplayer内置的COM组件开发的播放器,采用的是RTSP协议。受当时的互联网传......
  • C++火车头修订版
    #pragmaGCCoptimize(3)#pragmaGCCtarget("avx")#pragmaGCCoptimize("Ofast")#pragmaGCCoptimize("inline")#pragmaGCCoptimize("-fgcse")#pragmaGCCoptimize("-fgcse-lm")#pragmaGCCoptimize("-f......