3

我不确定为什么在通知视图 fx 时应该使用RaisePropertyChanging

 private LoggingLvl _myLoggingLvl;
    public LoggingLvl MyLoggingLvl
    {
        get { return _myLoggingLvl; }
        set
        {
            RaisePropertyChanging("MyLoggingLvl");
            _myLoggingLvl = value;
            RaisePropertyChanged("MyLoggingLvl");
        }
    }

为什么推荐使用RaisePropertyChanging

4

3 回答 3

7

在应用更改之前,使用INotifyPropertyChanging将允许使用代码有机会使用属性的先前值。这通常不会有用,但在某些情况下它可能有用:如果您想象一个表示“活动对象”的属性,则此事件将允许您触发在对象被取消激活时将触发的代码。

作为一个人为的示例,考虑一个 UI,其中字段值的更改需要以特定方式显示:旧值应该“浮动”离开屏幕,留下新值。如果实现了模型类INotifyPropertyChanging,则视图模型类可以附加到此事件,以缓存值以在浮动动画中使用。这允许模型类表示当前状态,而视图模型可以维护驱动 UI 所需的所有值。

于 2013-05-02T09:13:19.870 回答
3

我以前从未听过推荐RaisePropertyChanging。如果您需要通知“外界”指定的属性将要更改,则可以使用它。

这可能很有用,例如,当您的应用程序的某些部分应该根据系统的其他参数验证更改的属性状态时,也可能表明它不是一个可以更改的对象,因为遵循单一职责原则您的类可能不是了解您的应用程序类型的其他实例的状态。

于 2013-05-02T08:50:08.203 回答
0

INotifyPropertyChanging 接口用于通知客户端(通常是绑定客户端)属性值正在更改。

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanging.aspx

假设对您的财产进行长期运行的验证任务。希望需要 5 秒来更新属性值。同时,其他一些属性正在寻找它,这些属性在竞争条件下进行处理。并在队列下等待并完成一个属性更改通知,然后第一个对象将获得更改以获取或设置属性值。

让我给你一些例子。

于 2013-05-02T08:49:09.950 回答