Динамическое обновление textBox в WPF. C#
Начал изучать WPF и столкнулся с проблемой при переносе консольного приложения в формы. Проблема заключается в коде C#, а именно в цикле ввода точек. В переменную n мы задаем кол-во точек и после чего в цикле их вносим, в консольном приложении все работает корректно, но в формах ошибка - возможно только один раз внести значения, после чего происходит выполнение всего кода, без возможности добавить новые точки для правильного подсчета. Подскажите, пожалуйста, как сделать так, чтобы можно было вводить значения в textBox и они обновлялись за каждый проход цикла и уже дальше передавались в метод Interpolate? Для построения графика использую библиотеку ScottPlot.
Код XAML
<Window x:Name="window" x:Class="WpfApp3.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:local="clr-namespace:WpfApp3"
mc:Ignorable="d"
Title="MainWindow" Height="501" Width="995">
<Grid x:Name="Panel" Cursor="" Background="{Binding ElementName=window, Mode=OneWay}">
<Grid.RowDefinitions>
<RowDefinition Height="479*"/>
<RowDefinition Height="6*"/>
</Grid.RowDefinitions>
<TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="24" Margin="169,359,0,0" TextWrapping="Wrap" Text="X" VerticalAlignment="Top" Width="143" TextChanged="textBox1_TextChanged"/>
<TextBox x:Name="textBox2" HorizontalAlignment="Left" Height="24" Margin="169,391,0,0" TextWrapping="Wrap" Text="F(x)" VerticalAlignment="Top" Width="143" TextChanged="textBox2_TextChanged"/>
<Button x:Name="button" Content="График" HorizontalAlignment="Left" Height="37" Margin="748,410,0,0" VerticalAlignment="Top" Width="237" Click="button_Click" IsDefault="True"/>
<TextBox x:Name="textBox3" HorizontalAlignment="Left" Height="24" Margin="169,423,0,0" TextWrapping="Wrap" Text="X" VerticalAlignment="Top" Width="143"/>
<TextBox x:Name="textBox4" HorizontalAlignment="Left" Height="24
" Margin="353,423,0,0" TextWrapping="Wrap" Text="Результат" VerticalAlignment="Top" Width="176"/>
<WpfPlot x:Name="WpfPlot" HorizontalAlignment="Center" Height="351" VerticalAlignment="Top" Width="995" Loaded="WpfPlot_Loaded" Background="Black"/>
<Label Content="Введите Х для точки i+1" HorizontalAlignment="Left" Height="24" Margin="24,359,0,0" VerticalAlignment="Top" Width="140" FontSize="11"/>
<Label Content="Введите f(x) для точки i+1" HorizontalAlignment="Left" Height="24" Margin="24,391,0,0" VerticalAlignment="Top" Width="140" FontSize="11"/>
<Label Content="Введите x для для расчета полинома Лагранжа" HorizontalAlignment="Left" Height="28" Margin="24,417,0,0" VerticalAlignment="Top" Width="145" FontSize="11"/>
<Button x:Name="bt1" Content="Вычислить" HorizontalAlignment="Left" Height="37" Margin="591,410,0,0" VerticalAlignment="Top" Width="140" Click="Button_Click_1"/>
</Grid>
</Window>
Код C#
using ScottPlot;
using ScottPlot.Drawing.Colormaps;
using ScottPlot.Styles;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
namespace WpfApp3
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public class Point
{
public double x, y;
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
public static double Interpolate(Point[] f, double xi, int n)
{
double result = 0; // результат
for (int i = 0; i < 1; i++)
{
double term = f[i].y;
for (int j = 0; j < n; j++)
if (j != i)
term = term * (xi - f[j].x) / (f[i].x - f[j].x);
result += term;
}
return result;
}
};
private void button_Click(object sender, RoutedEventArgs e)
{
int n = 1; // задается размер массива
Point[] f = new Point[n]; // массив точек
for (int i = 0; i < n; i++)
{
double xi = double.Parse(textBox1.Text);
double yi = double.Parse(textBox2.Text);
double[] dataX = new double[] { xi, xi }; // строим график
double[] dataY = new double[] { yi, yi };
WpfPlot.Plot.AddScatter(dataX, dataY);
WpfPlot.Refresh();
f[i] = new Point(xi, yi);
}
double x = double.Parse(textBox3.Text);
textBox4.Text = Point.Interpolate(f, x, n).ToString();
}
private void textBox2_TextChanged(object sender, TextChangedEventArgs e)
{}
private void WpfPlot_Loaded(object sender, RoutedEventArgs e)
{}
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{}
private void Button_Click_1(object sender, RoutedEventArgs e)
{}
}
}