EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:立即将应用程序模型更改应用于当前视图

本主题描述如何实现在应用程序模型中进行更改的操作,然后将这些更改应用于当前视图而不重新创建它。

注意

此解决方案不适用于移动应用程序,因为它们不支持不重新编译就不支持UI自定义。

在Action的SimpleAction.Execute事件处理程序中,将Frame的View(Frame.View)对象保存到变量,然后调用Frame.SetView方法将View与Frame分离。传递null(在VB中为Nothing)作为视图参数,并传递false作为disposeOldView参数以保持分离视图的可操作性。之后,对Application模型进行更改,并使用false参数调用View.LoadModel方法。接下来,使用SetView方法的SetView(View view)重载将更新的View重新附加到Frame。这下面的控制器实现了两个操作(SwitchMasterDetailModeSwitchEditor)来说明此模式。

using System;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Actions;
using DevExpress.ExpressApp.Scheduler.Win;
using DevExpress.ExpressApp.Win.Editors;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.Base.General;
// ...
public class RefreshViewControlsAfterModelChangesViewController : ObjectViewController<ListView, IEvent> {
    public RefreshViewControlsAfterModelChangesViewController() {
        new SimpleAction(this, "SwitchMasterDetailMode", PredefinedCategory.View.ToString(), (s, e) => {
            // Save the current View.
            ListView savedView = (ListView)Frame.View;
            // Detach the View from the Frame without disposing of it.
            if(Frame.SetView(null, true, null, false)) {
                // Make required changes to the related Application Model nodes.
                MasterDetailMode defaultMasterDetailMode = MasterDetailMode.ListViewOnly;
                savedView.Model.MasterDetailMode = savedView.Model.MasterDetailMode == defaultMasterDetailMode ? MasterDetailMode.ListViewAndDetailView : defaultMasterDetailMode;
                // Update the saved View according to the latest model changes and assign it back to the current Frame.
                savedView.LoadModel(false);
                Frame.SetView(savedView);
            }
        });
        new SimpleAction(this, "SwitchEditor", PredefinedCategory.View.ToString(), (s, e) => {
            var savedView = View;
            if(Frame.SetView(null, true, null, false)) {
                Type defaultListEditorType = Application.Model.Views.DefaultListEditor;
                savedView.Model.EditorType = savedView.Model.EditorType == defaultListEditorType ? typeof(SchedulerListEditor) : defaultListEditorType;
                savedView.LoadModel(false);
                Frame.SetView(savedView);
            }
        });
    }
}
相关文章

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