2016-01-25 50 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 
相關問題