在C#中: 我有一个在几个gui类之间共享的数据类。我希望所有使用它的gui类在某些属性发生变化时得到通知,这样他们就可以使GUI保持最新状态。
在我添加的几个属性中,GUI类可以监听更新。这似乎没问题。
我遇到的问题是越来越多的属性需要GUI通知。当发生这种情况时,我将不得不添加更多的代表。这似乎也增加了它必须管理的数据类的责任。
是否有一些常用模式可用于监控此类以从数据类中提取此通知职责?
答案 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窗体中有多种类型的数据绑定。
对于简单的数据绑定(将一个对象的数据源转换为一个控件),您可以使用INotifyPropertyChanged,或者您可以使用以下格式添加事件:PropertyName 已更改您想要的每个属性在GUI中更新。您应该将Binding.ControlUpdateMode属性设置为OnPropertyChanged。
对于复杂数据绑定(包含许多绑定到控件的数据源,可以显示多个对象),您应该使用(1)中的所有内容,并且应该使用BindingSource或BindingList或手动实施IBindingList;
有关更多信息,您应该看到这本好书:
Chris Sells的Windows Forms 2.0 Programming Brian Noyes Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET