Search code examples
c#visual-studio-2015devexpressxaf

DevExpress XAF - Test if an object is registred before executing code in ViewController


I'm developing using DevExpress XAF, my problem is a little bit tricky, in short, when I save my class I make changes in other classes based on the data provided, I realized this with a controller that executes code when I close the detail view, the problem is that there is a scenario that does not meet my needs, here is it:

When I open a detail view already existing and that I modify some data, when I close the window, the program displays a window of confirmation ("do you want to register?) when I click on no, normally my view controller will not do anything because I refused to change my class data

Finally here is my question: How to test in my view controller if the object was registered or not before proceeding to the change and execute my code?


Solution

  • When you say register, I think you mean save.

    You can use the ObjectSpace.GetObjectsToSave() method to obtain a list of objects which will be saved when ObjectSpace.CommitChanges() is called. You can then determine whether View.CurrentObject is in this list.

    Alternatively you could use the ObjectSpace_ObjectChanged event. Something like this.

    public class MyViewController : ObjectViewController<DetailView, Contact> {
        protected override void OnActivated() {
            base.OnActivated();
            ObjectSpace.ObjectChanged += ObjectSpace_ObjectChanged;
        }
    
        void ObjectSpace_ObjectChanged(object sender, ObjectChangedEventArgs e) {
            if (e.Object == View.CurrentObject) {
                // execute your business logic
            }
        }
    
        protected override void OnDeactivated() {
            base.OnDeactivated();
            ObjectSpace.ObjectChanged -= ObjectSpace_ObjectChanged;
        }
    }
    

    See here for a Support Center discussion of a similar request.