Apply Application Model Changes to the Current View Immediately
- 2 minutes to read
The example in this topic shows how to update the Application Model and apply the changes to a View immediately. Your application doesn’t reload the View if you follow the instructions below.
The code below implements two Actions that illustrate this approach to model customization.
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) => {
// Obtain and save the view
ListView savedView = (ListView)Frame.View;
// Detach the View from the Frame
// Don't dispose the old view
if(Frame.SetView(view: null, true, null, disposeOldView: false)) {
// Change the Application Model
MasterDetailMode defaultMasterDetailMode = MasterDetailMode.ListViewOnly;
savedView.Model.MasterDetailMode =
savedView.Model.MasterDetailMode == defaultMasterDetailMode ?
MasterDetailMode.ListViewAndDetailView : defaultMasterDetailMode;
// Load Model changes into the View
savedView.LoadModel(false);
// Re-attach the View back to its Frame
Frame.SetView(savedView);
}
});
new SimpleAction(this, "SwitchEditor",
PredefinedCategory.View.ToString(), (s, e) => {
// Same algorithm as above
var savedView = View;
if(Frame.SetView(view: null, true, null, disposeOldView: false)) {
Type defaultListEditorType = Application.Model.Views.DefaultListEditor;
savedView.Model.EditorType =
savedView.Model.EditorType == defaultListEditorType ?
typeof(SchedulerListEditor) : defaultListEditorType;
savedView.LoadModel(false);
Frame.SetView(savedView);
}
});
}
}
Caution
We did not design this solution to be used in the Controller.
See Also