通知Gui数据类已更改

时间:2010-01-23 16:08:24

标签: c#

在C#中: 我有一个在几个gui类之间共享的数据类。我希望所有使用它的gui类在某些属性发生变化时得到通知,这样他们就可以使GUI保持最新状态。

在我添加的几个属性中,GUI类可以监听更新。这似乎没问题。

我遇到的问题是越来越多的属性需要GUI通知。当发生这种情况时,我将不得不添加更多的代表。这似乎也增加了它必须管理的数据类的责任。

是否有一些常用模式可用于监控此类以从数据类中提取此通知职责?

5 个答案:

答案 0 :(得分:6)

执行此操作的常用方法是使数据类实现INotifyPropertyChanged

编辑:如果你有很多属性,这可能导致数据类中的重复代码,如果你绑定到UI,最好使用AOP方法并拦截对属性的调用你想通知。大多数IoC容器都支持这种事情。

答案 1 :(得分:3)

该模式称为Observer。在.Net中,事件是该模式的一种实现。 对于观察单个属性的特定情况,应使用the INotifyPropertyChanged接口(如@Lee describes)。

答案 2 :(得分:2)

您没有说明您正在使用的GUI框架(WinForms,WPF),但有INotifyPropertyChanged接口。 MSDN上也有How to指南。

答案 3 :(得分:1)

您可以使用内置的System.EventHandler。这是一个非常标准的模式。您仍然需要为要监视的每个属性定义一个事件,但不需要单独的委托。

答案 4 :(得分:0)

在Windows窗体中,有几种方法可以在使用数据绑定对某些属性进行查询时通知GUI。

Windows窗体中有多种类型的数据绑定。

  1. 对于简单的数据绑定(将一个对象的数据源转换为一个控件),您可以使用INotifyPropertyChanged,或者您可以使用以下格式添加事件:PropertyName 已更改您想要的每个属性在GUI中更新。您应该将Binding.ControlUpdateMode属性设置为OnPropertyChanged。

  2. 对于复杂数据绑定(包含许多绑定到控件的数据源,可以显示多个对象),您应该使用(1)中的所有内容,并且应该使用BindingSourceBindingList或手动实施IBindingList;

  3. 有关更多信息,您应该看到这本好书:

    Chris Sells的

    Windows Forms 2.0 Programming Brian Noyes Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET