C# 将详细信息从一个窗口传递到另一个窗口
我选择了一些C# 将详细信息从一个窗口传递到另一个窗口,c#,wpf,datagrid,selectionchanged,C#,Wpf,Datagrid,Selectionchanged,我选择了一些文本框,当用户希望注意到他们与其他人有过联系时,他们会填写这些文本框。大多数文本框都是通过键入来填充的。但是,对于其中一个,我希望用户能够从单击按钮时出现的人员列表中进行选择 这就是我遇到问题的地方。到目前为止,我刚刚创建了一个DataGrid,并处理了它的SelectionChanged方法来填充textboxstext属性。这很好,但是现在在当前页面上没有足够的空间来显示整个DataGrid,其中包含他们可以选择的所有人员 我决定在一个单独的、较小的窗口中显示人员,当用户单击按钮
文本框
,当用户希望注意到他们与其他人有过联系时,他们会填写这些文本框。大多数文本框
都是通过键入来填充的。但是,对于其中一个,我希望用户能够从单击按钮时出现的人员列表中进行选择
这就是我遇到问题的地方。到目前为止,我刚刚创建了一个DataGrid
,并处理了它的SelectionChanged
方法来填充textboxs
text属性。这很好,但是现在在当前页面上没有足够的空间来显示整个DataGrid
,其中包含他们可以选择的所有人员
我决定在一个单独的、较小的窗口中显示人员
,当用户单击按钮时,该窗口会出现。我遇到的问题是,当用户选择他们希望在新的窗口中标记联系人的人员
时,我不知道如何通知原始窗口
已选择了人员
,关闭新的较小的窗口
,并在原始窗口
上填写相应的文本框
根据打开的窗口
上的选择,填写原始窗口
上的文本框
最直观的方法是什么?我将使用委托,委托调用原始窗口的函数并用它解析更改的变量。所以你知道当用户点击某个东西时,你可以直接对这个“事件”做出反应
链接:
如果您使用像Galasoft的MVVM Light()这样的框架,他们就有一个messenger系统用于此目的。它允许您“广播”可由应用程序的任何其他部分“接收”的消息这是在考虑使用域、模型、表示(MVC格式的Winforms/WPF版本)来执行应用程序时使用的
您可以将每个表单作为自己的类,它们是自己的类。创建每个表单类,但如果控件是私有的,则向其中添加一些公共成员。让它们只具有“get”属性,并返回该形式的任何控件或变量的值。您的主窗体将是控制窗体。所有表单都将由主表单处理,因此当您打开它时,它是主表单可以访问的类
现在,如果我记得(最近做了更多的MVC而不是任何Winforms),我相信如果使用ShowDialog()方法,它将冻结主线程,这样当您关闭主窗体时,您可以继续阅读您打开的forms类中的公共成员。我相信它的运行方式是一样的。如果使用just Show(),线程将继续异步运行。使用异步,您可能需要在启动代码中使用一个主窗体,以便始终有一个窗口,但订阅窗体的关闭事件,并有一个方法可以将这些公共成员抓取出来。确保在主类的根目录实例化额外的表单,这样当它存在于调用它的方法时,它就不会超出范围。您甚至可以使调用的方法成为异步调用,并且在窗体上运行Show方法的命令之前有一个wait
总之,将每个窗体视为自己的类,但添加可以从所需控件和/或变量读取值的公共成员。当类通过事件关闭时,或者当线程从窗体关闭中关闭时,从类中读取该数据。表单关闭并没有丢弃对象,只是表单的可视化
哦,如果您正在将信息从主窗体传递给要打开的子窗体,则可以为该窗体类添加一个构造函数,该构造函数将您的输入作为模型或值,以在显示之前填充适当的变量或窗体,或者创建一个公共属性,您可以在显示该类之前输入要发送的值
记住,每件事都是一个类,一旦你以这样的方式看待它,并以这样的方式对待它,答案就会出现。:-)
我应该警告你,我是一个长篇大论的解释者
在工作中,将所有这些从内存中记录下来,以便可能存在一些错误。如果有,请告诉我。我想问题是访问主窗口的控件,不是吗?
您可以使用以下结构定义更改用户选择和访问主窗口控件的事件:
((MainWindow)Application.Current.MainWindow).MyTextBox