使用一类变量自动更新文本框

时间:2013-08-13 22:16:27

标签: c# variables binding textbox

我正在尝试在C#WPF中执行以下操作:

我有两个名为Window1Window2的窗口。

Window1是一个控制接口,它接收来自不同来源的数据,如UDP,数据库或手工输入;然后将数据“发送”到Window2以便在Text Boxes中显示。我们在Window2中总共说出约50个文本框。我创建了一个类(DataSet1),其中包含50个不同类型的变量(Int16Int32DoubleString等等。)< / p>

Window2包含DataSet1中包含的班级Window1的本地声明。我想收集Window1中的数据,然后将其分配给Window2。这将在Window2.dataSet1 = dataSet1内完成类似Window1的操作。收到新数据后,Window2中的TextBox需要根据已更改的任何内容进行更新(或者只是更新所有内容)。

现在我知道我可以在Window1中执行50个赋值,例如Window2.TextBox1 = dataSet1.Variable1.ToString()Window2.TextBox2 = dataSet1.Variable2.ToString()等等。我只想用一个赋值语句来执行此操作,该语句基本上从一个窗口复制类变量到另一个。

我认为我必须实施INotifyPropertyChanged,但我不知道如何在多个字段更改中更新多个TextBoxes

好的,听起来没有人可以处理这个或者我没有说清楚,所以我添加了一些代码来试图说明。通过研究和遵循一些例子,我确实得到了一些简单的约束力。但我仍然不知所措。

// Main control program
public partial class MainWindow : Window
{
    Window1 window1 = new Window1();
    TestBinding testBinding = new TestBinding();


    public MainWindow()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
       // Just for testing make a button to click to simulate
       // complex data processing
       testBinding.Variable1 = 10;
       testBinding.Variable2 = 20;
       testBinding.Variable3 = 50;

       window1.RemoteTestBinding = testBinding;            
    }
}

// Class module
public class TestBinding
{
    public Int32 Variable1;
    public Int32 Variable2;
    public Int32 Variable3;
}

// One of several display pages
public partial class Window1 : Window, INotifyPropertyChanged
{
    private String fun;
    private TestBinding remoteTestBinding;      

    public event PropertyChangedEventHandler PropertyChanged;

    void OnPropertyChanged(String propertyName)
    {
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }


    public Window1()
    {
        InitializeComponent();
        TestBinding remoteTestBinding = new TestBinding();

        this.DataContext = this;
        this.Show();

    }

    // Problem is here, how do I return a string for the bound label but pass in a class??????
    public TestBinding RemoteTestBinding
    {
        get { return remoteTestBinding; }
        set
        {
            remoteTestBinding = value;
            this.OnPropertyChanged("RemoteTestBinding");
        }
    }
}


<Label Content="{Binding RemoteTestBinding}" Height="26" Width="10"/>

2 个答案:

答案 0 :(得分:0)

两个选项

  1. 他们真的需要50个文本框吗?你可以创建一个显示为GridView的ListView,它具有绑定到数据集

    <强> http://www.c-sharpcorner.com/uploadfile/mahesh/gridview-in-wpf/

  2. 其他选项是在结果或Window1准备好之后以编程方式在Window2上创建控件,并使用 foreach 或类似

  3. 指定其值

答案 1 :(得分:0)

好的,我终于弄明白了,它确实有效。在传递变量类时,我编写了触发更新所有文本框的特定过程。最终的代码看起来像这样。

public String RemoteTestBinding
{
    get { return "Value to return"; }
}

每个绑定的文本框都已正确更新。