使用一类变量自动更新文本框
本文关键字:更新 文本 类变量 | 更新日期: 2023-09-27 18:27:29
我正在尝试在C#
和WPF
中执行以下操作:
我有两个名为Window1
和Window2
的窗口。
Window1
是一个控制接口,它接收来自不同来源的数据,如UDP、数据库或手动输入;数据随后被"发送"到CCD_ 6以在CCD_。假设Window2
中总共有50个文本框。我创建了一个类(DataSet1
),其中包含50个不同类型的变量(Int16
、Int32
、Double
、String
等)。
Window2
具有包含在Window1
中的类DataSet1
的局部声明。我想收集Window1
中的数据,然后将其分配给Window2
。这将在Window1
中执行类似于Window2.dataSet1 = dataSet1
的操作。在接收到新数据后,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"/>
两个选项
-
它们真的需要50个文本框吗?你能创建一个显示为GridView的ListView吗?它与数据集有绑定
http://www.c-sharpcorner.com/uploadfile/mahesh/gridview-in-wpf/
-
另一种选择是在结果或Window1准备好后,在Window2上用程序创建控件,并用foreach或类似的分配其值
好吧,我终于弄明白了,它起作用了。当传入变量类时,我编写了特定的过程,触发更新所有文本框。最后的代码看起来是这样的。
public String RemoteTestBinding
{
get { return "Value to return"; }
}
每个绑定的文本框都已正确更新。