PersistentBase.OnChanged(String, Object, Object) Method
Invoked after an object’s property has been changed.
Namespace: DevExpress.Xpo
Assembly: DevExpress.Xpo.v24.1.dll
NuGet Packages: DevExpress.Win.PivotGrid, DevExpress.Win.TreeMap, DevExpress.Xpo
NuGet Package: DevExpress.Xpo
Declaration
Parameters
Name | Type | Description |
---|---|---|
propertyName | String | A property whose value was changed. |
oldValue | Object | An old value. |
newValue | Object | A new value. |
Remarks
Override this method in your PersistentBase descendants to add custom logic to a persistent object after the current object has been changed.
The code sample below demonstrates how to use the OnChanged method to declare persistent properties.
DateTime fOrderDate;
public DateTime OrderDate {
get { return fOrderDate; }
set {
if(fOrderDate != value) {
DateTime OldValue = fOrderDate;
fOrderDate = value;
OnChanged(nameof(OrderDate), OldValue, fOrderDate);
}
}
}
Example
The example below demonstrated how to automatically populate the CreatedBy, CreatedOn, UpdatedBy, and UpdatedOn properties (audit columns) in an XAF business class.
using DevExpress.Xpo;
...
namespace YourSolutionName.BusinessObjects {
[DefaultClassOptions]
public class Contact : BaseObject {
public Contact(Session session)
: base(session) {
}
// Get a current active user
ApplicationUser GetCurrentUser() {
return Session.GetObjectByKey<ApplicationUser>(
Session.ServiceProvider.GetRequiredService<ISecurityStrategyBase>().UserId);
}
// Automatically fill the CreatedOn and CreatedBy columns
// when a current user creates a new Contact item.
public override void AfterConstruction() {
base.AfterConstruction();
CreatedOn = DateTime.Now;
CreatedBy = GetCurrentUser();
}
// Automatically fill the UpdatedOn and UpdatedBy columns
// when a current user saves a modified Contact item.
protected override void OnSaving() {
base.OnSaving();
UpdatedOn = DateTime.Now;
UpdatedBy = GetCurrentUser();
}
protected override void OnChanged(string propertyName, object oldValue, object newValue) {
base.OnChanged(propertyName, oldValue, newValue);
if(!IsLoading) {
switch(propertyName) {
// Run custom code when the "Email" property value is changed.
case nameof(Email):
UpdateContacts();
break;
}
}
}
ApplicationUser createdBy;
public ApplicationUser CreatedBy {
get { return createdBy; }
set { SetPropertyValue("CreatedBy", ref createdBy, value); }
}
DateTime createdOn;
public DateTime CreatedOn {
get { return createdOn; }
set { SetPropertyValue("CreatedOn", ref createdOn, value); }
}
ApplicationUser updatedBy;
public ApplicationUser UpdatedBy {
get { return updatedBy; }
set { SetPropertyValue("UpdatedBy", ref updatedBy, value); }
}
DateTime updatedOn;
public DateTime UpdatedOn {
get { return updatedOn; }
set { SetPropertyValue("UpdatedOn", ref updatedOn, value); }
}
}
}