饼图通过文本框条目更改 [英] pie chart change by text boxes entries

查看:84
本文介绍了饼图通过文本框条目更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的窗口上有三个文本框控件,如何使用它们在饼图上更改FirstTeam,SecondTeam和ThiredTeam的值?

Hi, there are three text box controls on my window, how can i use them to change values of FirstTeam, SecondTeam and ThiredTeam on pie chart?

<Window x:Class="ChartTest.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow" Height="350" Width="525"

        xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" Loaded="Window_Loaded">
    <Grid>
        <chartingToolkit:Chart HorizontalAlignment="Left" Margin="12,0,0,64" Name="chart1" VerticalAlignment="Bottom" Width="345" Height="235" >
            <chartingToolkit:PieSeries ItemsSource="{Binding}"

                                       IndependentValueBinding="{Binding Path=Name}"

                                       DependentValueBinding="{Binding Path=Votes}"/>
        </chartingToolkit:Chart>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="435,43,0,0" Name="txtFirstTeam" VerticalAlignment="Top" Width="56"  />
        <TextBox Height="25" HorizontalAlignment="Left" Margin="435,69,0,0" Name="txtSecondTeam" VerticalAlignment="Top" Width="56"  />
        <TextBox Height="24" HorizontalAlignment="Left" Margin="436,103,0,0" Name="txtThiredTeam" VerticalAlignment="Top" Width="52"  />
    </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;

namespace ChartTest
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            List<Party> parties = new List<Party>();

            parties.Add(new Party() { Name = "FirstTeam", Votes = 10 });
            parties.Add(new Party() { Name = "SecondTeam", Votes = 30 });
            parties.Add(new Party() { Name = "ThiredTeam", Votes = 5 });

            chart1.DataContext = parties;
        }
    }
}

推荐答案

可以使用多种方法,但是如果您在班级定义了聚会清单",则可以引用它的内容来自任何方法.之后,通过文本框事件TextChanged修改值.就像这样:
There are several ways of doing it, but if you define the List of Party at class level, you''ll be able to reference it''s contents from any method. After that modify the values via text box event TextChanged. So something like:
public partial class MainWindow : Window
    {
        List<Party> parties = new List<Party>();

        public MainWindow()
        {
            InitializeComponent();

        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {


            parties.Add(new Party() { Name = "FirstTeam", Votes = 10 });
            parties.Add(new Party() { Name = "SecondTeam", Votes = 30 });
            parties.Add(new Party() { Name = "ThiredTeam", Votes = 5 });

            chart1.DataContext = parties;
        }
        private void textBox1_TextChanged(object sender, TextChangedEventArgs e) {
           ((Party)this.parties[0]).Votes = (int)textBox1.Text;
        }
    }


当然,在更改Votes的值之前,必须先进行适当的数据检查等操作.另外,由于您将列表用作数据上下文,因此请考虑使用 ObservableCollection [ ^ ].


加法:

考虑以下示例:
XAML


Of course proper data checks and so on must be written before the value of Votes is changed. Also since you''re using the list as a datacontext, consider using ObservableCollection[^] instead.


Addition:

Consider the following example:
XAML

<Window x:Class="ChartTest.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow" Height="350" Width="525"

        xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"

        Loaded="Window_Loaded">
    <Grid>
        <chartingToolkit:Chart HorizontalAlignment="Left" Margin="12,0,0,64" Name="chart1" VerticalAlignment="Bottom" Width="345" Height="235" >
            <chartingToolkit:PieSeries ItemsSource="{Binding}"

                                       IndependentValueBinding="{Binding Path=Name}"

                                       DependentValueBinding="{Binding Path=Votes}"/>
        </chartingToolkit:Chart>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="435,43,0,0" Name="txtFirstTeam" VerticalAlignment="Top" Width="56" TextChanged="txtFirstTeam_TextChanged" />
        <TextBox Height="25" HorizontalAlignment="Left" Margin="435,69,0,0" Name="txtSecondTeam" VerticalAlignment="Top" Width="56" TextChanged="txtSecondTeam_TextChanged" />
        <TextBox Height="24" HorizontalAlignment="Left" Margin="436,103,0,0" Name="txtThiredTeam" VerticalAlignment="Top" Width="52" TextChanged="txtThiredTeam_TextChanged" />
    </Grid>
</Window>


代码


Code

public partial class MainWindow : Window {
   System.Collections.ObjectModel.ObservableCollection<Party> parties = new System.Collections.ObjectModel.ObservableCollection<Party>();
   public MainWindow() {
      InitializeComponent();
   }
   private void Window_Loaded(object sender, RoutedEventArgs e) {

      parties.Add(new Party() { Name = "FirstTeam", Votes = 10 });
      parties.Add(new Party() { Name = "SecondTeam", Votes = 30 });
      parties.Add(new Party() { Name = "ThiredTeam", Votes = 5 });

      this.txtFirstTeam.Text = parties[0].Votes.ToString();
      this.txtSecondTeam.Text = parties[1].Votes.ToString();
      this.txtThiredTeam.Text = parties[2].Votes.ToString();

      chart1.DataContext = parties;
   }

   private void txtFirstTeam_TextChanged(object sender, TextChangedEventArgs e) {
      chart1.DataContext = null;
      this.parties[0].Votes = Int32.Parse(txtFirstTeam.Text);
      chart1.DataContext = parties;
   }

   private void txtSecondTeam_TextChanged(object sender, TextChangedEventArgs e) {
      chart1.DataContext = null;
      this.parties[1].Votes = Int32.Parse(txtSecondTeam.Text);
      chart1.DataContext = parties;
   }

   private void txtThiredTeam_TextChanged(object sender, TextChangedEventArgs e) {
      chart1.DataContext = null;
      this.parties[2].Votes = Int32.Parse(txtThiredTeam.Text);
      chart1.DataContext = parties;
   }

}
public class Party {
   public string Name { set; get; }
   public int Votes { set; get; }

}


那只是一个草图,如果您清空文本框或添加非数字字符等等,程序将失败,因此您必须进行适当的检查等.


That is just a sketch and the program will fail if you empty a text box or add a non number character and so on so you have to make proper checks etc.


这篇关于饼图通过文本框条目更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆