Files
Christoph Schwörer f045b99a25 Codebasis als Dateien ins Arbeitsrepo statt als Gitlink
QuellCode/CentronERP war nur als Gitlink (Submodul-Referenz auf 79c1142)
getrackt, ohne .gitmodules und ohne erreichbares Remote. Der
Untersuchungsgegenstand der Versuchsreihe war damit nicht reproduzierbar
gesichert: Ein Klon haette ein leeres Verzeichnis erhalten, und die Belege
der 3.287 Anforderungen waeren nicht ueberpruefbar gewesen.

Umstellung:
- Historie nach c:\DEV\CentronERP_git_snapshot_79c1142 ausgelagert
  (vollstaendig lesbar, enthaelt 79c1142 und Vorgaenger 89ccfd6)
- Gitlink aus dem Index entfernt
- Dateiinhalt aufgenommen: 24.557 Dateien, rund 333 MB

Die verschachtelte .gitignore der Codebasis gilt weiter, Build-Artefakte
bleiben ausgeschlossen. Details in Versuche/Versuch_01/_Codebasis-Nachweis.md
2026-08-26 07:43:51 +02:00

2.5 KiB

How to create a settings page

Naming convention for your settingspage is simple:
[YourSettingsName]Settings[Controller/View/ViewModel]

Create your Controller

First you have to create a class that implements ICentronAppModuleSettingController.

CreateSettingControlInstance() needs to handle the creation of the view and the viewmodel and set the DataContext for the view. This should all be done in this method and not in the ctor of the view.

You MUST also add an ImageLarge.

Create your View

Next create a view of the type BaseSettingControl.

You have to implement DoInitalize() and simply route it through to your viewmodel. It should handle all the loading of settings.

Then implement DoSave() and again simply route it to your viewmodel. If you want to restrict saving you can also implement CanSave(). DoAfterSave() allows you to execute something after saving of all pages is complete.

The view should not implement a WaitIndicator. One will be shown on initialization and on saving by the container.

Create your ViewModel

The viewmodel does not need to implement anything specific aside from BindableBase.

It should handle initialization and loading of settings in a asnyc method called from the view. Nothing should be loaded via the ctor.

Saving should be done with another async method that is called from the view.

If there is an error during loading or saving you need to throw an exception. The container will handle it and show a error dialog. Do NOT display a messagebox yourself.

Of course all other c-entron.NET conventions apply ;)

Register your Controller

If your settings applies to a specific module it needs to be registered in that modules ICentronAppModuleController.GetSettings().

If it does not belong to a specific module it needs to be registered in ModuleRegistration.GetSettingsWithoutModule().

If your settings page is a personal settings it needs to be registered in ModuleRegistration.GetPersonalSettings().

If the specific module is not registered in the moduleslist you need to register your settings in both ICentronAppModuleController.GetSettings() in your module and ModuleRegistration.GetSettingsWithoutModule().

Examples

Centron.WPF.UI/Modules/Administration/CentronConfigDb/CentronConfigDbSettingsController.cs  
Centron.WPF.UI/Modules/Helpdesk/Settings/TypesHelpdeskTypeSettingsControllers.cs  
Centron.WPF.UI/Modules/MyCentron/PersonalSettings/UI/PersonalUISettingsController.cs