2016-01-25 169 views
2

我有一个TextBoxes选择,当用户希望注意到他们已经与另一个人有联系时填写。大多数TextBoxes暗示通过键入它们来填充。但是,对于其中的一个,我希望用户能够从点击按钮时出现的People列表中进行选择。将细节从一个窗口传递到另一个窗口

这是我遇到问题的地方。到目前为止,我只是提出了一个DataGrid出现和处理它的SelectionChanged方法来填写TextBoxes文本属性。这工作得很好,但是现在当前页面没有足够的空间来显示整个DataGrid与他们可以从中选择的所有人。

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

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

回答

0

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

0

这是在考虑使用域,模型,演示文稿(Winforms/WPF版本的MVC格式)来执行您的应用程序时。

你可以将每个表单都作为自己的类,以及它们是他们自己的类。如果控件是私有的,创建每个表单类但添加一些公共成员。让他们只有“获取”属性,并返回任何控件或变量的形式的值。你的主要形式将是控制形式。所有表格都将由主表格处理,因此当您打开表格时,它是主表格可以访问的类别。我相信如果你使用ShowDialog()方法,它会冻结主线程,所以当你关闭主表单时,你可以继续阅读您在您开设的表格课程中的公开成员。同步我相信它运行。如果您仅使用Show(),则线程将保持卡车运行,即异步。使用异步方式,您可能必须在启动代码中使用主表单,因此总会有一个窗口,但订阅表单的关闭事件并有一种方法可以将这些公共成员截获出来。确保在主类的根目录下实例化额外的表单,以便在存在调用它的方法时不会超出范围。您甚至可以使调用的方法是异步调用,并在运行窗体上的Show方法的命令之前等待。

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

哦,如果您要将信息从主窗体传递给子窗口,请为该窗体类添加一个构造函数,该窗体类将输入作为模型或值在显示之前填入适当的变量或表单它或创建一个公共财产,你可以把你想要发送的价值,然后显示课程。

记住,一切都是一流的,一旦你看它本身和对待它,答案会来的。 :-)

我要提醒,我是一个长篇大论解释器。

在工作中将所有这些从内存中删除,所以可能存在一些错误。让我知道如果有。

0

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

((MainWindow)Application.Current.MainWindow).MyTextBox 
相关问题