2009-04-18 45 views
1

我有一個WPF頁面,其中包含一個ListBox和一個框架。該框架具有加載到其中的各種頁面,由列表框中的選擇決定。訪問父頁面控件的WPF框架

框架內的每個頁面都有各種不同的輸入框,並具有保存取消按鈕。點擊保存按鈕後,我需要將內容保存到數據庫,並且要刷新父頁面中的列表框以反映新數據。

保存數據很簡單,但是如何從頁面內的頁面調用父頁面時,如何啓動Listbox內容的刷新?

我需要以某種方式能夠訪問父頁面控件來做到這一點。

任何想法?

回答

3

從技術角度來說,可能會觸及父控件,並使用它所包含的控件的方式,但它使代碼非常難以維護,因爲如果更改父控件的結構,則會將代碼分解所有包含的頁面。這將被認爲是一種非常緊密耦合的設計,並且通常很脆弱。

somehwat清潔器的設計將是當您按下保存按鈕時,您的頁面類會引發一個事件。然後,您的父框架可以吸收事件並刷新其在保存操作後需要刷新的任何內容。這更容易維護,因爲您的組件更鬆散耦合,但它仍然將大量數據庫知識放入GUI組件中。這樣的設計可能適用於一個相對簡單的應用程序,您不希望進行大量維護或未來的增強功能。

我喜歡的設計模式(與許多開發人員一樣)是使用簡單的編程接口來隔離一個或多個類中的數據庫處理和業務邏輯,並且可以輕鬆進行測試。 GUI組件保持儘可能簡單和輕薄,因此可以根據需要輕鬆更改它們。這通常稱爲模型 - 視圖 - 控制器模式,但還有其他名稱。在您的示例中,封裝業務邏輯的「控制器」類將具有用於讀取和設置信息的屬性和方法,以及將更改寫入數據庫的「Save」或「Commit」方法。一旦保存完成,它將引發一個「保存」或「更改」事件,通知所有控件(「視圖」),顯示信息已更改的信息,並且它們將根據控制器類的屬性的新值。

+0

謝謝Jay,這是一個有趣的方法。我正在使用具有數據訪問層的業務對象,所以也許我可以從那裏啓動刷新。我曾希望儘管WPF提供了一種訪問家長控制的簡單方法,但也許我太樂觀了! – Mitch 2009-04-18 23:33:55