代码之家  ›  专栏  ›  技术社区  ›  Hamish Smith

InotifyPropertyChanging和验证:何时引发PropertyChanging?

  •  11
  • Hamish Smith  · 技术社区  · 17 年前

    InotifyPropertyChanged是一个相当简单的解释,我想我很清楚什么时候提升它(也就是说,当我更新完值之后)。
    如果我实现了inotifyPropertiesChanging,我倾向于在进入setter或其他更改对象状态的方法后立即引发事件,然后继续进行可能发生的任何保护和验证。

    因此,我将事件视为属性可能更改但尚未更改,并且可能无法成功完成更改的通知。

    如果对象的使用者正在使用此属性(比如说使用事件进行更改跟踪的Linq to SQL),我应该推迟并仅在验证给定的值是否良好以及对象的状态是否对更改有效后引发事件吗?

    这个活动的合同是什么?订户会有什么副作用?

    3 回复  |  直到 17 年前
        1
  •  13
  •   Mark Cidade    17 年前

    如果为对象给定的值对属性无效,并且引发异常,则不应引发 PropertyChanging 事件。只有当你决定了 改变。典型的使用场景是更改一个简单字段:

    public T Foo
     { get
        { return m_Foo;
        }
       set
        { if (m_Foo == value) return; //no need for change (or notification)
          OnPropertyChanging("Foo");
          m_Foo = value;
          OnPropertyChanged("Foo");
        }
     }
    
        2
  •  1
  •   Marc Gravell    17 年前

    作为旁白- PostSharp 具有自动实现inotifyPropertiesChanged的有趣功能- like so .

        3
  •  0
  •   Michael L Perry    17 年前

    如果要避免完全实现inotifyPropertiesChanged,请考虑使用 Update Controls .NET 相反。这几乎消除了所有的簿记代码。

    推荐文章