Динамическое обновление 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)
        {}
    }
}

Ответы (0 шт):