WPF框架访问父页面控件

时间:2009-04-18 18:07:24

标签: wpf parent frame

我有一个包含Listbox和框架的WPF页面。该框架具有加载到其中的各种页面,由列表框中的选择确定。

框架中的每个页面都有各种不同的输入框,并有一个“保存取消”按钮。单击“保存”按钮时,我需要将内容保存到数据库,并且要刷新父页面中的列表框以反映新数据。

保存数据很简单,但是当从框架内的页面调用时,如何在父页面中启动列表框内容的刷新?

我需要能够以某种方式访问​​父页面控件才能执行此操作。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

技术上可以进入父控件并使用它包含的控件,但它会使代码难以维护,因为如果更改父控件的结构,则会破坏所有代码所包含的页面。这被认为是一种非常紧密耦合的设计,而且往往很脆弱。

somehwat清洁设计是在按下“保存”按钮时让页面类引发事件。然后,您的父框架可以下沉事件并刷新它在保存操作后需要刷新的任何内容。这更容易维护,因为您的组件更松散耦合,但它仍然将大量数据库知识放入您的GUI组件中。这样的设计可能适用于您不希望进行大量维护或未来增强的相对简单的应用程序。

我更喜欢的设计模式(和许多开发人员一样)是使用可以轻松测试的简单编程接口将一个或多个类中的数据库处理和业务逻辑隔离开来。 GUI组件尽可能简单和薄,因此可以在必要时轻松更改。这通常称为模型 - 视图 - 控制器模式,但还有其他名称。在您的示例中,封装业务逻辑的“controller”类将具有用于读取和设置信息的属性和方法,以及将更改写入数据库的“保存”或“提交”方法。保存完成后,它会引发“已保存”或“已更改”事件,通知所有控件(“视图”)显示信息已更改的信息,并根据控制器类属性的新值自行刷新