DevExpress XAF - 在 ViewController 中执行代码之前测试对象是否已注册

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

我正在使用 DevExpress XAF 进行开发,我的问题有点棘手,简而言之,当我保存 class 时,我会根据提供的数据对其他 classes 进行更改,我通过关闭详细视图时执行代码的控制器实现了这一点,问题是有一个场景不符合我的需求,这里是:

当我打开一个已经存在的详细视图并修改一些数据时,当我关闭 window 时,程序会显示 window 确认(“你想注册吗?”当我点击否时,通常我的视图控制器不会做任何事情,因为我拒绝更改我的 class 数据

最后我的问题是:在继续更改和执行我的代码之前,如何在我的视图控制器中测试对象是否已注册?

当你说注册时,我想你的意思是保存

您可以使用 ObjectSpace.GetObjectsToSave() 方法获取对象列表,在调用 ObjectSpace.CommitChanges() 时将保存这些对象。然后您可以确定 View.CurrentObject 是否在此列表中。

或者您可以使用 ObjectSpace_ObjectChanged 事件。像这样。

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;
    }
}

有关类似请求的支持中心讨论,请参阅 here