2012-04-12 69 views
0

我试图创建一个系统,用户界面不会更新每次我的业务对象之一的属性发生更改,而是仅以受控方式更新。用于UI更新的替代INotifyPropertyChanged

这是我的推理:

  1. 业务对象被更新,许多每秒数百次,但在我看来,用户确实只需要看到一个更新每隔250左右毫秒。我正在考虑让计时器每250毫秒运行一次,并且每次它都会调用一个方法来告诉UI它需要刷新自己。

  2. 用户界面相当大,我想这样做的唯一控制就是刷新自己将是目前正在查看的用户。

我知道了INotifyPropertyChanged模式,但不会这种不必要的更新UI每次什么东西被更新?

我试过使用.RefreshDataSource(),但我想知道是否有更好的方法?

回答

2

我知道INotifyPropertyChanged模型,但不会在每次更新任何内容时不必要地更新UI?

好吧,只要在UI中显示的属性设置器中调用NotifyPropertyChanged("PropertyName")即可。因为这实际上迫使UI每次更新该属性再次设置 - 意味着每个属性每秒数百次。您也可以在方法中调用NotifyPropertyChanged("PropertyName"),每当您的计时器过去时都会调用该方法。所以不需要使用RefreshDataSource()而不是INotifyPropertyChagend

+0

我认为这就是我要做的 - 如果我要调用“NotifyPropertyChanged()”(不传入属性的名称)会发生什么?当我做了测试时,它似乎仍然有效 - 如果您传递的字符串与任何属性都不匹配,是否更新所有这些属性? – William 2012-04-12 20:50:01

+0

[MSDN](http://msdn.microsoft.com/zh-cn/library/system.componentmodel.inotifypropertychanged.propertychanged.aspx ):* PropertyChanged事件可以通过使用Nothing或String.Empty作为PropertyChangedEventArgs中的属性名称来指示对象上的所有属性已更改。* 这是在NotifyPropertyChanged方法中调用的常用方法。在每个财产的每个制定者中提出这个事件我不知道为什么,因为首先这个事件只会引发一次,其次你只能使用th e {get; set;}语法,这意味着更少的代码。 – 2012-04-12 22:06:12

+0

我的意思是说,如果你用'String.empty'调用方法,事件就会被提升一次。这取决于。如果你只是用一个特定的动作更新你的整个UI,传递string.Empty可能会更好。 如果你不想在一个属性被修改的时候更新你的整个UI,我认为把NotifyPropertyChanged方法放在每一个都更好。 – 2012-04-12 22:19:46

1

您可以选择何时调用NotifyPropertyChange - 为什么不通过抑制频繁调用来实现INotifyPropertyChanged的基类?