我正在尝试在C#
和WPF
中执行以下操作:
我有两个名为Window1
和Window2
的窗口。
Window1
是一个控制接口,它接收来自不同来源的数据,如UDP,数据库或手工输入;然后将数据“发送”到Window2
以便在Text Boxes
中显示。我们在Window2
中总共说出约50个文本框。我创建了一个类(DataSet1
),其中包含50个不同类型的变量(Int16
,Int32
,Double
,String
等等。)< / 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"/>
答案 0 :(得分:0)
两个选项
他们真的需要50个文本框吗?你可以创建一个显示为GridView的ListView,它具有绑定到数据集
<强> http://www.c-sharpcorner.com/uploadfile/mahesh/gridview-in-wpf/ 强>
其他选项是在结果或Window1准备好之后以编程方式在Window2上创建控件,并使用 foreach 或类似
答案 1 :(得分:0)
好的,我终于弄明白了,它确实有效。在传递变量类时,我编写了触发更新所有文本框的特定过程。最终的代码看起来像这样。
public String RemoteTestBinding
{
get { return "Value to return"; }
}
每个绑定的文本框都已正确更新。