PropertyChanged事件需要每次单击激发一次
本文关键字:一次 单击 事件 PropertyChanged | 更新日期: 2023-09-27 17:59:41
我遇到了一个场景,我认为我的系统开始遇到扩展问题,我认为这是由于没有以"正确的方式"进行
本质上,我有一个Silverlight项目,在这个特定的领域,我的模型有很多依赖
int _Weight;
public int Weight
{
get { return _Weight; }
set
{
if (value != _Weight)
{
_Weight = value;
RaisePropertyChanged("Weight");
}
}
}
然后,在该模型的外部,我的应用程序还将一个额外的事件链接到propertyChanged事件上,如下所示
myObject.PropertyChanged += UpdateUI;
我的UpdateUI做了很多图形处理,生成了绑定无法满足的图像。
而且效果很好。
但现在假设我的Weight属性也对其他属性有影响,这些属性也会触发PropertyChanged事件(因为它们应该这样做,所以绑定到这些属性的所有ui字段都会更新),但它也会导致每次都触发UpdateUI。
这意味着,如果一个属性也影响了其他3个属性,那么UpdateUI将在最后一个属性之后真正需要触发时触发4次。
它并没有破坏任何东西,只是感觉效率低下,架构不正确。
所以本质上,我想问的是,我如何才能让我的UpdateUI在每一系列属性更改中只触发一次
感谢
由于不了解您的体系结构,我有两个ide。
- 这是我的选择,但需要更多的努力-设计您的UpdateUI方法,使其可以根据更改的属性进行更新,而不是在数百个ViewModels中的一个属性更改时简单地刷新整个UI。例如,如果PersonViewModel的年龄发生了更改,则只更新该年龄
- 每隔几秒钟执行一次挂起的布局更新。例如,您可以启动某种计时器,它将检查是否有挂起的布局更新(您必须自己构建)并执行它们,或者最后一个,这取决于您。这可能是有效的,但必须仔细设计
我不熟悉Silverlight,只熟悉WPF,但我想同样的原则也适用。