Difference between revisions of "Design of Control Tables"
(Created page with '== Introduction == A <tt>ControlTable</tt> is a class whose instances can hold user settings. <tt>ControlTables</tt> are typically presented in a <tt>PropertyGrid</tt>, which me�?�') |
|||
Line 21: | Line 21: | ||
{ | { | ||
if (value < 0) | if (value < 0) | ||
− | throw new ArgumentOutOfRangeException("value", " | + | throw new ArgumentOutOfRangeException("value", "CleaningVariation must be >= 0"); |
ChangeProperty(ref _cleaningVariation, value); | ChangeProperty(ref _cleaningVariation, value); | ||
} | } | ||
Line 29: | Line 29: | ||
Note the following: | Note the following: | ||
− | * NoInlining must be set for the set method, otherwise property changed won't work in release mode | + | * <tt>NoInlining</tt> must be set for the set method, otherwise property changed won't work in release mode |
* Validation can be done before the value is changed | * Validation can be done before the value is changed | ||
− | * <tt>UndoablePropertyChangedBase</tt> implements <tt>ChangeProperty</tt> methods with overloads for | + | * <tt>UndoablePropertyChangedBase</tt> implements <tt>ChangeProperty</tt> methods with overloads for the most common simple types. |
+ | |||
=== Presentation of Control Tables === | === Presentation of Control Tables === | ||
Revision as of 10:35, 21 May 2010
Introduction
A ControlTable is a class whose instances can hold user settings. ControlTables are typically presented in a PropertyGrid, which means that no user interface has to be built for properties with a simple type.
By adding the sttribute Slu.Heureka.BaseLayer.ConfigurationHandling.ControlTable a class is marked as a ControlTable. The system will automatically discover all ControlTables at startup.
Implementation of Control Tables
Creating a new Control Table
Although not required, it is recommended that ControlTables inherit from UndoablePropertyChangedBase. This base class simplifies implementation of the INotifyPropertyChanged interface, which should be used for classes presented in the PropertyGrid.
To add a property of a simple type, follow this example:
public int CleaningVariation {
get { return _cleaningVariation; } [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] set { if (value < 0) throw new ArgumentOutOfRangeException("value", "CleaningVariation must be >= 0"); ChangeProperty(ref _cleaningVariation, value); }
}
Note the following:
- NoInlining must be set for the set method, otherwise property changed won't work in release mode
- Validation can be done before the value is changed
- UndoablePropertyChangedBase implements ChangeProperty methods with overloads for the most common simple types.
Presentation of Control Tables
Since ControlTables are presented in a PropertyGrid, the attributes in System.ComponentModel aids with the presentation of a ControlTable, such as:
- Category
- Properties with the same Category are grouped in the PropertyGrid
- DisplayName
- The DisplayName is the name for the property shown in the PropertyGrid.
- Description
- The Description is shown at the bottom of the PropertyGrid when the property is selected. The description should give a brief help to the user.
- DefaultValue
- The DefaultValue is the value set when a new instance of a ControlTable is created. Also, the PropertyGrid shows properties with the default value in a normal font, and properties with a changed value in a bold font.
- Browsable
- The Browsable attribute can be set to false to hide properties in the property grid (unconditionally, to conditionally hide properties see Hiding Properties Conditionally
In addition to this, a number of additional attributes and type converters are available in the Slu.Heureka.BaseLayer.ComponentModel namespace:
- ObjectDefaultValues
- Allows default values to be set on other types than simple types
- PercentTypeConverter
- Presents a property with a fraction (e.g. 0.03) to be presented as a percentage (e.g. 3%)