将详细信息从一个窗口传递到另一个窗口

时间:2016-01-25 16:01:24

标签: c# wpf datagrid selectionchanged

我有一个TextBoxes选项,当用户希望注意到他们已经与其他人联系时,他们会填写这些内容。大多数TextBoxes都是通过输入来填充的。但是,对于其中一个,我希望用户能够从他们点击按钮时出现的People列表中进行选择。

这是我遇到问题的地方。到目前为止,我刚刚显示DataGrid并处理了它的SelectionChanged方法以填写TextBoxes文本属性。这已经很好了,但是现在当前页面上没有足够的空间来显示整个DataGrid以及他们可以选择的所有人。

我决定将People显示在用户点击Window时显示的单独的较小Button中。我遇到的问题是,当用户选择他们希望在新Person中标记联系人的Window时,我不知道如何通知原始Window {已选择{1}},关闭新的较小Person并在原始Window上填写相应的TextBox

根据打开的Window上的选择,在原始TextBox上填写Window的最直观方法是什么?

4 个答案:

答案 0 :(得分:0)

我会使用委托,它调用原始窗口的函数并用它解析更改的变量。因此,您知道用户何时点击了某些内容并且您可以直接对此事件做出反应"事件"。

链接: https://msdn.microsoft.com/en-us/library/ms173171.aspx

答案 1 :(得分:0)

如果你使用像Galasoft的MVVM Light(http://www.galasoft.ch/)这样的框架,他们就有一个信使系统就是为了这个目的。它允许您“广播”可以被应用程序的任何其他部分“接收”的消息

答案 2 :(得分:0)

这是考虑使用域,模型,演示文稿(WinC / WPF格式的MVC格式)来完成您的应用程序。

您可以将每个表单作为自己的类,它们是自己的类。创建每个表单类,但如果控件是私有的,则向其添加一些公共成员。让他们有"得到"仅属性并返回该表单中任何控件或变量的值。您的主要表格将是控制表格。所有表单都将由主表单处理,因此当您打开它时,它是主表单可以访问的类。

现在,如果我记得(最近做了更多的MVC而不是任何Winforms)我相信如果你使用ShowDialog()方法,它会冻结主线程,所以当你关闭主表单时,你可以继续并公开阅读您打开的表单类中的成员。同步我相信它运行。如果你只使用Show(),那么线程将继续进行货运,异步。使用异步,您可能必须在启动代码中使用主窗体,因此总有一个窗口,但订阅窗体的close事件,并有一个方法可以抓住那些公共成员。一定要在主类的根处实例化额外的表单,这样当它存在调用它的方法时,它不会超出范围。您甚至可以使调用方法成为异步调用,并在窗体上运行Show方法的命令之前进行等待。

摘要,将每个表单视为自己的类,但添加可以从所需控件和/或变量中读取值的公共成员。通过事件关闭时从类中读取该数据,或者当线程从关闭表单中关闭时同步读取该数据。关闭表单不会丢弃对象,只是表单的可视化。

哦,如果你要打开从主窗体到子窗口的信息,要么为该窗体类添加一个构造函数,它将输入作为模型或值,以在显示它之前填充适当的变量或形式或创建一个公共属性,您可以在显示该类之前输入您想要发送的值。

记住,一切都是一个阶级,一旦你这样看待它并对待它,答案就会到来。 : - )

我应该警告,我是一个冗长的解释者。

在工作中将所有这些从内存中删除,因此可能存在一些错误。如果有,请告诉我。

答案 3 :(得分:0)

我认为问题是访问主窗口的控件,不是吗? 您可以使用以下结构定义更改用户选择和访问MainWindow控件的事件:

((MainWindow)Application.Current.MainWindow).MyTextBox