我有一个包含列表框和框架的 WPF 页面。框架具有加载到其中的各种页面,这些页面由列表框中的选择决定。
框架内的每一页都有各种不同的输入框,并有一个保存取消按钮。单击“保存”按钮时,我需要将内容保存到数据库中,并刷新父页面中的列表框以反映新数据。
保存数据很容易,但是当从框架内的页面调用它时,如何在父页面中启动列表框内容的刷新?
我需要以某种方式能够访问父页面控件来执行此操作。
有任何想法吗?
从技术上讲,可以进入父控件并使用它包含的控件,但它会导致代码非常难以维护,因为如果您更改父控件的结构,您会破坏所有包含的代码页。这将被认为是一个非常紧密耦合的设计,而且它通常很脆弱。
一个更简洁的设计是让您的页面类在按下 Save 按钮时引发一个事件。然后,您的父框架可以接收事件并刷新它知道在保存操作后需要刷新的任何内容。这更容易维护,因为您的组件更松散耦合,但它仍然将大量数据库知识放入您的 GUI 组件中。这样的设计可能适用于相对简单的应用程序,您不希望在其上进行大量维护或未来增强。
我喜欢的设计模式(和许多开发人员一样)是将数据库处理和业务逻辑隔离在一个或多个类中,并使用易于测试的简单编程接口。GUI 组件尽可能保持简单和精简,因此可以在必要时轻松更改它们。这通常被称为模型-视图-控制器模式,但它还有其他名称。在您的示例中,封装业务逻辑的“控制器”类将具有用于读取和设置信息的属性和方法,以及将更改写入数据库的“保存”或“提交”方法。保存完成后,它会引发“已保存”或“已更改”事件,通知所有控件(“视图”