0

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

我有两个称为Window1和的窗口Window2

Window1是一个控制接口,用于接收来自不同来源的数据,例如 UDP、数据库或手动输入;Window2然后将数据“发送”到Text Boxes. 假设总共有 50 个文本框Window2。我DataSet1创建了一个类 ( ),其中包含 50 个不同类型的变量(Int16Int32DoubleString等)。

Window2具有.DataSet1中包含的类的本地声明Window1。我想收集数据,Window1然后将其分配给Window2. 这将是Window2.dataSet1 = dataSet1从内部完成的Window1。收到新数据后,Window2需要根据任何已更改的文本框进行更新(或者可能只是更新所有这些数据)。

现在我知道我可以在 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"/>
4

2 回答 2

0

好的,我终于想通了,它有效。当传入变量类时,我编写了触发更新所有文本框的特定程序。最终的代码看起来像这样。

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

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

于 2013-09-09T17:48:49.557 回答
0

两种选择

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

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

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

于 2013-08-13T22:24:17.133 回答