EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

业务类中的PropertyChanged事件

为了提供一致的用户界面,当您的XAF应用程序的属性值更改时,必须从业务类接收通知。例如,当用户修改某个值时,条件外观验证模块可能需要立即更新UI。本主题描述如何提供来自XPO实体框架非持久性业务类的通知。

通知机制基于支持标准INotifyPropertyChanged接口并实现其声明的PropertyChanged事件。要将通知发送到内部XAF代码,请从业务类中的属性集访问器触发PropertyChanged

XPO中的PropertyChanged事件

无需在XPO业务类中手动实现INotifyPropertyChanged接口。声明XPO业务类时,您将继承已经支持此接口的BaseObject(或另一个基本持久性类)。您可以通过执行XPBaseObject.OnChanged或PersistentBase.SetPropertyValue帮助器方法,从属性集访问器触发PropertyChanged事件。

public class Department : BaseObject {
    // ...
    private string title;
    public string Title {
        get {
            return title;
        }
        set {
            SetPropertyValue(nameof(Title), ref title, value);
        }
    }
}

另请参见: 简化的属性语法

实体框架中的PropertyChanged事件

在实现EntityFramework业务类时,您不会继承任何标准基类。因此,您应该手动实现INotifyPropertyChanged接口。XAF提供XAF业务对象| EF Business Object 项目项模板可简化此任务。

EFBusinessOblect

在现有的类中,可以如下实现INotifyPropertyChanged

public class Customer : INotifyPropertyChanged {
    // ...
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = null) {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

您可以使用OnPropertyChanged帮助程序方法从属性集访问器触发PropertyChanged事件。

public class Customer : INotifyPropertyChanged {
    // ...
    private CustomerStatus status;
        public CustomerStatus Status {
        get { return status; }
        set {
            if(status != value) {
                status = value;
                OnPropertyChanged();
            }
        }
    }
}

非持久类中的PropertyChanged事件

要在非持久类中使用PropertyChanged事件,请遵循上面针对实体框架描述的相同方法。

public class NonPersistentObject1 : INotifyPropertyChanged {
    // ...
    private string sampleProperty; 
    public string SampleProperty {
        get { return sampleProperty; }
        set {
            if (sampleProperty != value) {
                sampleProperty = value;
                OnPropertyChanged();
            }
        }
    }
    private void OnPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = null) {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

要创建支持INotifyPropertyChanged的新的非持久类,请使用XAF Business Object | XAF。非持久对象 项目项目模板

非持久对象

转载保留此链接,注明出处