PropertyChanged事件需要每次点击一次

时间:2014-04-24 08:34:43

标签: c# binding silverlight-5.0

我坐在一个场景中,我相信我的系统开始出现缩放问题,我认为这源于没有做某事"正确的方式"

基本上我有一个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仅在每个属性更改系列中触发一次

由于

1 个答案:

答案 0 :(得分:1)

不知道你的架构我有两个想法。

  1. 这是我要选择的,但需要更多努力 - 设计您的UpdateUI方法,以便它可以根据更改的属性进行更新,而不是简单地刷新整个UI,当数百个ViewModel之一的一个属性发生更改时。例如,如果PersonViewModel的Age更改,则仅更新。
  2. 几秒钟后执行挂起的布局更新。例如,您可以启动某种计时器,它将检查是否存在待处理的布局更新(您必须自己构建)并执行它们,或者最后一个取决于您。这可能很有效,但必须仔细设计。
  3. 我不熟悉Silverlight,只有WPF,但我想同样的原则适用。